BOJ/String

[BOJ] 8958 OX 퀴즈

J_Jayce 2021. 2. 16. 15:16

문제

www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 

풀이

개선 전 코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
	public static StringBuilder sb = new StringBuilder();

	public static int calc_point(String result) {
		int len = result.length(), sum=0;
		int[] cnt = new int[len];
		if(result.charAt(0)=='O') {
			cnt[0]=1;
			sum+=cnt[0];
		}
			
		for(int i=1;i<len;i++) {
			if(result.charAt(i)!='X') {
				if(result.charAt(i-1)!='X') {
					cnt[i]=cnt[i-1]+1;
					sum+=cnt[i];
				}
				else {
					cnt[i] = 1;
					sum+=cnt[i];
				}
			}
				
		}
		return sum;
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		String[] result = new String[N];  
		//테스트 결과 입력
		for(int i=0;i<N;i++) {
			result[i] = new String(br.readLine());
		}
		
		//계산
		for(int i=0;i<N;i++)
			System.out.println(calc_point(result[i]));
	}

}

 

개선 후 코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
	public static StringBuilder sb = new StringBuilder();

	public static int calc_point(String result) {
		char[] arr = result.toCharArray();
		int len = result.length(), sum=0;
		int cnt = 1;
		for(int i=0;i<len;i++) {
			if(arr[i]=='O')
				sum+=cnt++;
			else
				cnt=1;
		}
		return sum;
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		String[] result = new String[N];  
		//테스트 결과 입력
		for(int i=0;i<N;i++) {
			result[i] = new String(br.readLine());
		}
		
		//계산
		for(int i=0;i<N;i++)
			System.out.println(calc_point(result[i]));
	}

}