728x90

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

 

8958번: OX퀴즈

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

www.acmicpc.net

문제

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

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

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

 

풀이

문제를 연속으로 맞히면 점수를 추가로 획득하는 조건에 맞추어 총점을 출력하는 문제이다.

String 배열을 사용해서 풀어도 되지만, 배열을 사용하지 않고도 해결할 수 있어서 배열을 사용하지 않았다.

 

방법은 다음과 같다.

 

1. OX퀴즈의 결과를 입력받는다. (quiz : OX퀴즈의 결과, br : BufferedReader 클래스 객체

String quiz = br.readLine();

 

2. 문제를 맞았을 때 획득하는 점수와, 총점을 넣을 변수를 선언한다. (tmp : 문제를 맞았을 때 획득하는 점수, sum : 총점)

int tmp = 0;
int sum = 0;

 

3. 문자열의 길이만큼 반복문을 실행한다.

for(int j = 0; j < quiz.length(); j++) {

3-1. 한 글자씩 검사해서 'O'이면 획득하는 점수를 1 증가시킨다.

if(quiz.charAt(j) == 'O') tmp++;

3-2. 'X'이면 획득하는 점수에 0을 대입한다.

else tmp = 0;

3-3.  총점에 획득 점수를 더한다.

sum += tmp;

 

3-1 과정에서, 연속으로 정답을 맞혔을 경우('O'가 연속으로 입력된 경우) 획득하는 점수를 구할 수 있다.

'O'가 입력될 때마다 1씩 더해주기 때문이다.

 

코드

BufferedReader 클래스 StringBuilder 클래스를 이용한 코드

import java.io.*;

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

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

        for(int i = 0; i < num; i++) {
            String quiz = br.readLine();
            int tmp = 0;
            int sum = 0;
            for(int j = 0; j < quiz.length(); j++) {
                if(quiz.charAt(j) == 'O') tmp++;
                else tmp = 0;
                sum += tmp;
            }
            sb.append(sum).append("\n");
        }
        System.out.println(sb);
    }
}

틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!

728x90

+ Recent posts