반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/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
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[C언어] 백준 8958번 : OX퀴즈 본문

백준 - C, C++/05. 1차원 배열

[C언어] 백준 8958번 : OX퀴즈

ImJay 2020. 9. 30. 00:00
반응형

백준 8958번 : OX퀴즈

- 사용언어 : C언어

www.acmicpc.net/problem/8958

1. 문제

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

 

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

 

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

2. 코드

#include <stdio.h>
#include <string.h>

int main(void) {
    
    int input, score, sum;
    char test[80];

    scanf("%d", &input);

    for(int i=0; i<input; i++) {
        sum = 0;
        score = 1;
        scanf("%s", test);
        for(int j=0; j<strlen(test); j++) {
            if(test[j] == 'O') {
                sum += score;
                score++;
            }
            if(test[j] == 'X')  score = 1;
        } 
        printf("%d\n", sum);
    }
}

3. 풀이

먼저, 새로 등장하는 strlen() 함수에 대해 알아야 합니다.

 

strlen() 함수는 문자열의 길이를 반환하는 함수이며, <string.h> 헤더파일을 필요로 합니다.

 

예를 들어, char test[80] = "OXXO"; 라면, strlen(test) = 4가 되는 것입니다.

 

이해하셨다면, 바로 문제풀이로 들어가겠습니다.

 

int형 변수 input은 테스트 케이스의 개수, score는 점수이며, sum은 점수의 합입니다.

 

char형 배열 test는 문자열 O와 X를 받아줍니다.

 

1) scanf로 테스트 케이스의 개수 input을 받아줍니다.

 

2) 점수의 합 sum을 0으로 초기화

 

-> for문이 끝나면 새로운 OX문을 세야 하기 때문입니다.

 

3) 점수 score 또한 1로 초기화

 

-> 연속적인 O로 마무리 시 점수가 1보다 큰값으로 마무리 되기 때문입니다.

 

4) 그 후 scanf로 문자열 O,X를 받아줍니다.

 

5) 그 후 다시 for문에서 strlen(test) ( OX의 총 갯수) 만큼 O와 X를 세어줍니다.

 

6) test[j]가 O라면 sum += score 하여 점수를 더해주고 score++로 score의 점수를 올려줍니다.

 

7) test[j]가 X라면 연속적인 O가 끝났으므로 score = 1로 초기화해줍니다.

 

8) 다 세었으면 점수를 출력하고, 다시 루프.

반응형
Comments