본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-8958(OX퀴즈)

반응형

문제(출처)

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. 

O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 

문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 

예를 들어, 10번 문제의 점수는 3이 된다.


"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.


OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 

각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 

문자열은 O와 X만으로 이루어져 있다.


출력

각 테스트 케이스마다 점수를 출력한다.


예제 입력

5

OOXXOXXOOO

OOXXOOXXOO

OXOXOXOXOXOXOX

OOOOOOOOOO

OOOOXOOOOXOOOOX


예제 출력

10

9

7

55

30


내 풀이

package date_20181220;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class BOJ_9858 {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//      5
//      OOXXOXXOOO
//      OOXXOOXXOO
//      OXOXOXOXOXOXOX
//      OOOOOOOOOO
//      OOOOXOOOOXOOOOX
//      int num = 5;
//      String[] testCase = new String[num];
//      testCase[0] = "OOXXOXXOOO";
//      testCase[1] = "OOXXOOXXOO";
//      testCase[2] = "OXOXOXOXOXOXOX";
//      testCase[3] = "OOOOOOOOOO";
//      testCase[4] = "OOOOXOOOOXOOOOX";
        try {
            int num = Integer.parseInt(br.readLine());
//          OX를 입력 할 양을 정하는 숫자를 입력 받습니다.
            String[] strOx = new String[num];
//          OX를 입력 받을 배열을 선언합니다.
            for (int i = 0; i < num; i++) {
                strOx[i] = br.readLine();
//              입력 할 양 만큼 반복하여 OX를 입력 받아 배열에 저장합니다.
            }

            for (int i = 0; i < num; i++) {
                bw.write(String.valueOf(countOX(strOx[i])));
//              countOX 함수로 OX를 전달하고 반환되는 정수를 출력합니다.
                bw.newLine();
            }
            bw.flush();
            bw.close();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static int countOX(String strOX) {
        int checkO = 0;
//      O의 개수를 저장 할 변수를 선언합니다.
        int sum = 0;
//      총 점수를 저장 할 변수를 선언합니다.
        for (int i = 0; i < strOX.length(); i++) {
//          전달 받은 OX 길이만큼 반복합니다.
            if (strOX.charAt(i) == 'O') {
//              한 문자가 'O'와 같다면 check변수를 증분합니다.
                checkO++;
                sum += checkO;
//              증분한 checkO변수를 총 점수에 더합니다.
            } else {
                checkO = 0;
//              한 문자가 'X'이면 checkO를 0으로 초기화합니다.
            }
        }
        return sum;
    }
}



내 풀이 해석

String 배열로 테스트 케이스를 저장합니다.
countOX 함수로 하나의 배열을 전달하고 함수에서 'O'가 있는지 한 문자씩 확인합니다.
같다면 checkO를 1씩 증분하고 sum값에 더하고 반환합니다.


반응형