본문 바로가기

알고리즘

[백준] 8958번: OX퀴즈 (java, python)

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

 

8958번: OX퀴즈

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

www.acmicpc.net


🗒 풀이

java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] answers = new String[sc.nextInt()];

        for (int i = 0; i < answers.length; i++) {
            answers[i] = sc.next();
        }

        for (int i = 0; i < answers.length; i++) {
            int sum = 0;
            int count = 0;
            for (int j = 0; j < answers[i].length(); j++) {
                if (answers[i].charAt(j) == 'O') {
                    count += 1;
                    sum += count;
                } else {
                    count = 0;
                }
            }
            System.out.println(sum);
        }
    }
}

일단 answers 배열에 입력받은 정답을 저장한다.

다음 answers 배열을 탐색하면서 j 자리가 O, 즉 맞은 경우에는 count를 하나 높인 후에 sum 변수에 누적시킨다. 이는 연속된 정답 값을 처리하기 위함이다.

만약 O가 아닌 틀린 X라면, count를 0으로 초기화한다.


python

num = int(input())
for _ in range(num):
    answer = list(input())
    score = 0
    count = 0
    for a in answer:
        if a == 'O':
            count += 1
            score += count
        else:
            count = 0
    print(score)

자바와 같은 메커니즘이다.

여기서는 첫 번째 for문에 _ 값을 썼는데, for i in range(num): 으로 해도 됐었지만 i 값을 그 어디에서도 사용하지 않기에 불필요한 변수는 _을 사용함으로써 줄여줬다.