[C언어] 백준 8958번 : OX퀴즈
백준 8958번 : OX퀴즈
- 사용언어 : C언어
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) 다 세었으면 점수를 출력하고, 다시 루프.