Java/코딩테스트

[백준] 8958번: OX퀴즈 (JAVA)

다아빈 2025. 4. 13. 02:17
728x90
반응형

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

문제 접근

입력 받은 문자열에서 charAt() 을 통해 이전 문자랑 현재 문자를 비교해야겠다고 생각했습니다.

그래서 저는 다음과 같이 조건을 나눠서 생각했습니다.

  1. 이전 문자는 'X'인데, 현재 문자가 'O'인 경우
  2. 이전 문자랑 현재 문자가 'O'인 경우
  3. 나머지 경우 (즉, 현재 문자가 'X'인 경우)

1번의 경우, 점수가 1이 됩니다. 연속 되는 'O'의 개수만큼 점수를 더 얻는데, 이 경우에는 'O'문자의 시작점? 이니까요!

2번의 경우, 원래의 점수(score)에서 1을 더해져서 점수는 score + 1이 됩니다.

3번의 경우, 현재 문자가 'X'이니 점수는 0이 됩니다.

 

그리고 점수를 다 더한 후, 출력하면 되겠죠?

엄.. 제가 설명을 잘 못했지만.. 코드를 보면 이해가 되실 거에요..!

전체 코드

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        for(int i = 0;  i < n; i++) {
            String s = br.readLine();

            int score = 0;
            char prev = 'O';
            int sum = 0; // 점수의 합

            for(int j = 0; j < s.length(); j++) {
                if(s.charAt(j) != prev && s.charAt(j) == 'O'){
                    score = 1;
                    sum += score;
                    prev = s.charAt(j);
                } else if (s.charAt(j) == prev && s.charAt(j) == 'O') {
                    score++;
                    sum += score;
                } else {
                    score = 0;
                }
            }

             bw.write(sum + "\n");
        }

        bw.close();
    }
}

 

읽어주셔서 감사합니다!

728x90
반응형