(Java) 백준 8958번 - OX 퀴즈

코딩너구리·2026년 1월 20일

코딩 문제 풀이

목록 보기
168/266

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

문제

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

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

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

접근

입력받은 OX퀴즈 결과를 하나씩 읽어가며 X가 나올 때까진 부분점수를 1점씩 누적하며 매번 최종 점수에 누적한다.
만약 X가 나오면 부분점수를 0으로 초기화한다.

문제해결

> 테스트 케이스의 수 N을 입력받고 N을 1씩 감소시키며 0보다 클 때 까지만 while문을 반복한다.
> OX퀴즈의 결과를 str에 입력받아 저장하고 최종점수, 부분점수 변수를 score, tmp로 선언해준다.
> 퀴즈 결과 문자열의 길이만큼 반복하며 해당 문자가 O가 아닌
즉, X가 나오면 tmp(부분점수)를 0으로 초기화한다.
> continue를 통해 결과가 O일 때 실행되는 최종점수 score에 부분점수를 1씩 누적한 값을 누적하는 작업을 스킵해준다.
> 최종 점수를 출력한다.

코드

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

public class Main
{
    //8958번 OX퀴즈
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        while(N-- > 0)
        {
            String str = br.readLine();
            int score = 0;
            int tmp = 0;

            for(int i = 0; i < str.length(); i++)
            {
                if(str.charAt(i) != 'O')
                {
                    tmp = 0;
                    continue;
                }
                score += (tmp += 1);
            }
            System.out.println(score);
        }

    }
}

후기

자바에선 while문의 조건이 무조건 boolean형이 들어가야 한다고 한다. c++에선 그냥 N-- 넣으면 알아서 0/1을 false, true로 변환해서 해줬었는데.. 그래서 N-->0으로 0보다 크다로 조건을 잡아줘야한다고 한다. 마치 --> 로 화살표 같이 보여서 흥미롭다.

0개의 댓글