곽로그

[백준 8958] OX퀴즈 본문

알고리즘/백준

[백준 8958] OX퀴즈

일도이동 2019. 4. 24. 00:29
반응형

 

 

1차원 배열 사용하기 단계

1차원 배열 사용하기

www.acmicpc.net

 

  문제를 풀때, 너무 어렵게 생각하는 경향이 있다. 이 문제도 충분히 쉽게 접근할 수 있는데 진짜 어렵게 풀었다. 코드를 올리기 정말 부끄럽지만, 나는 초짜니까.

 

 

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int N=in.nextInt();
		for(int i=0;i<N;i++) {
			String s=in.next();
			int maxCount=0;
			int index=0;

			while(index<s.length()) {
				int count;
				if(s.charAt(index)=='X') {
					index++;
				}
				else {
					count=1;
					index++;
					while(index<s.length()&&s.charAt(index++)=='O' ) {
						count++;

					}
					
					for(int j=1;j<=count;j++) {
						maxCount+=j;
					}
					
				}
			}
			System.out.println(maxCount);
		}

	}

}

 한눈에 보고 이해하기 어려운 코드는 그다지 좋은 코드가 아닌 것 같다. 저 코드의 요지는 다음과 같다. 

 

1) string을 순회하면서 

2) 인덱스에 해당하는 요소가 X이면 다음 인덱스로

3) O이면 count를 하나 증가시키고

4) 다음 인덱스에 X가 나올 때까지 count를 증가시켜라 

5) X가 나오면 count를 1부터 count까지 더해라

 

이거다. 이 코드가 돌아가기는 하지만... 아니올시다.

 

 쉽게생각하자. 문제에서 핵심은 X가 나오기전까지 연속되는 O의 개수를 누적합하는 거다. 대신 X가 나오면 개수를 초기화 해야한다. 초기화!!!가 뽀인트다. 

 

1) string을 순회하면서

2) 인덱스에 해당하는 요소가 O이면 count를 1 증가시키고 sum에 count를 누적합한다

3) 인덱스에 해당하는 요소가 X이면 count를 0으로 초기화 한다.

 

이거면 된다. 

 

 

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int T=in.nextInt();
		for(int testCase=0;testCase<T;testCase++) {
			String s=in.next();
			int count=0;
			int sum=0;
			for(int index=0;index<s.length();index++) {
				if(s.charAt(index)=='O') {
					count++;
					sum+=count;
				}
				else {
					count=0;
				}
			}
			System.out.println(sum);
		}
		
	}

}

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 10039] 평균점수  (0) 2019.04.25
[백준 2448] 별찍기-11 (시간초과)  (0) 2019.04.24
[백준 2577] 숫자의 개수  (0) 2019.04.22
[백준 1065] 한수  (0) 2019.04.19
[백준 4673] 셀프 넘버  (0) 2019.04.18
Comments