티스토리 뷰

문제. 

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

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

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

 

입출력.

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

 

방법.

'O'가 연속된다면, 추가 점수가 발생하고 연속하지 않으면 추가 점수가 발생하지 않는다. 추가 점수가 발생하지 않는 경우 지금까지의 점수를 저장했던 score값을 total에 더해서 저장해 두고, 초기화해서 다시 추가 점수가 없는 상태로 되돌려주었다.

 

반복을 빠져나가는 조건이 개행문자라서 마지막까지 저장되었던 score점수가 total에 반영되지 않았다. 그래서 while문 바깥에서 다시 total에 추가로 더해주었다. 그리고 점수를 한 번에 출력해야하기때문에 배열에 저장했다가 채점이 끝난 후 for문을 사용해 출력했다.

#include <stdio.h>

int main(void){
    //문제8958 / 2021.02.24 
    int cnt;
    int score=0, num=0, total=0;
    char c;

    scanf("%d",&cnt);
    getchar();
    int result[cnt];

    for(int i=0; i<cnt; i++){
        score=0, num=0, total=0;
        while(1){
            scanf("%c",&c); //버퍼에 테스트 케이스 입력
            if(c=='\n'){
                break;
            }else if(c=='O'){
                num++;
                score+=num;
            }else{
                total+=score;
                num=0, score=0;
            }
        }
        result[i]=total+score;
    }

    for(int i=0; i<cnt; i++){
        printf("%d\n",result[i]);
    }

    return 0;
}

 

Insight.

오늘 스터디에서 scanf()함수가 어떤 방식을 통해 Buffer메모리 공간에서 데이터를 가져오는지에 대해 공부했다. 활용해볼 만한 문제를 찾다가 예전에 JAVA로 풀었던 문제 중에 하나 골라서 풀어봤는데 잘 이해하고 있는 것 같아서 뿌듯하다. 

 

사실 어제 시간초과때문에 이번에도 시간 초과가 나올까 걱정했는데 다행이다.

 

 

 

 

 

8958번: OX퀴즈

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

www.acmicpc.net

댓글
«   2025/05   »
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 29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday