728x90

문제

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

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

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

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

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





1. 풀이

1) 문자열에서 O의 횟수만큼 카운터를 따로 해주자.

2) 출력으로는 카운터 값을 더해서 출력하자.



2. 코드 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<string>
 
int main() {
    //입력
    int test;
    std::cin>>test;
    
    std::string input[test];
    int ret[test]={0,};                //출력을 할 ret값은 배열로 생성해 따로 저장해준다.
    
    for(int t=0;t<test;t++){
        std::cin>>input[t];            //입력을 받자.
        int count(0);                //카운터를 따로 돌려준다.
        for(int i=0;i<input[t].size();i++){
            if(input[t][i]=='O'){
                count++;
                ret[t] += count;    //카운터 값을 ret값에 저장!
            } 
            else if(input[t][i]=='X') count = 0;        //만일 이번 문자가 'X'라면, count 초기화!
        }
    }
    
    //출력
    for(int t=0;t<test;t++){
        std::cout<<ret[t]<<"\n";
    }
}
cs



3. 문제 링크

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


4. 참고

+ Recent posts