Algorithm/Baekjoon

[Baekjoon] 백준 8958 OX퀴즈 - java

담크 2021. 7. 19. 23:57

이번에도 1차원 배열 문제 중 하나를 가져왔는데 이번 문제는 처음 딱 봤을 때 뭔가 로직이 바로 떠오르지 않고 O의 개수를 세는 게 아니라 연속한 걸 더해야 하는 건 어떻게 구현해야하나.... 라는 마음으로 시작하게 됐습니다. ㅎㅎ

문제는

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.


문제풀이

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String arr[] = new String[sc.nextInt()];
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.next();
			
			int cnt = 0;
			int sum = 0;
			
			for(int j = 0; j < arr[i].length(); j++) {
				
				if(arr[i].charAt(j) == 'O') {
					cnt++;
				} else {
					cnt = 0;
				}
				sum += cnt;
			}
			System.out.println(sum);
		}
	}
}

 

처음에 이 문제가 응? 뭐지? 했었던건 내가 O와 X를 따로따로 생각했기 때문에 어려웠던거 같아요....

예를 들어 첫 번째인 OOXXOXXOOO를 보고 1 + 2 + 0 + 0 + ... 이런 식으로 생각하니까 도저히 로직이 떠오르지 않았는데 결국 점수는 O의 합을 구하는 것이라고 안 다음은 쉽게 풀었습니다.

 

먼저 String 배열에 문자열을 각각 저장해준다음 여기에 저장되어 있는 문자열은 charAt을 이용해 하나하나 모두 비교해줍니다. 이때 몇 번째까지 던 O가 연속되면 연속된 만큼 cnt에 +1을 계속해주면서 늘려가고 O가 아닐 경우 cnt를 0으로 초기화해주는 방법을 사용했습니다.