4단계 - 8958번
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
문제점
1. count 변수를 최초에 0으로 초기화하지 말아야 한다.
-> count 변수를 최초에 int i로 시작하는 반복문의 안쪽에서, 그리고 int j로 시작하는 반복문의 바깥에서
1로 초기화해야 'O'의 개수를 1부터 시작해서 셀 수 있다.
2. int j로 시작하는 반복문 안에서 o_count의 배열에 숫자를 넣으며 'O'의 개수를 셀 때, o_count[j] = o_count[j] + 1 로 코드를 작성하면 잘못 카운팅을 하게된다.
-> o_count[j] = o_count[j] + count 로 설정을 해야 2번째 'O'는 +2, 3번째'O'는 +3을 o_count의 배열에 더할 수 있다.
3. else if 'X'를 굳이 따로 설정할 이유가 없다.
-> if (test_case[j] == 'O')를 체크했다면, 나머지는 모두 else로 처리해도 괜찮다.
어차피 입력값이 O 아니면 X이기 때문에, O만 최초에 if에서 체크하면 모두 해결가능하다.
오답 풀이
#include <stdio.h>
#include <string.h>
int main(void)
{
int n;
char test_case[80];
int O_count[100] = {0, };
int count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", &test_case[i]);
for (int j = 0; j < strlen(test_case); j++)
{
count = 1;
if (test_case[j] == 'O')
{
O_count[i] = O_count[i] + 1;
count++;
}
else if (test_case[j] == 'X')
{
count = 1;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%d\n", O_count[i]);
}
return 0;
}
최종 정답풀이
#include <stdio.h>
#include <string.h>
int main(void)
{
int n;
int count;
char test_case[80];
int o_count[100] = { 0, };
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", &test_case[i]);
count = 1;
for (int j = 0; j < strlen(test_case); j++)
{
if (test_case[j] == 'O')
{
o_count[i] += count;
count++;
}
else
{
count = 1;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%d\n", o_count[i]);
}
return 0;
}
'백준(C언어) > 22년 7월' 카테고리의 다른 글
7월 19일(화) - 6단계(11720번) (0) | 2022.07.20 |
---|---|
7월 18일(월) - 4단계(4344번) (0) | 2022.07.18 |
7월 13일(수) - 4단계(10818번 , 2562번 , 2577번) (0) | 2022.07.16 |
7월 16일(토) - 4단계(1546번) (0) | 2022.07.16 |
7월 15일(금) - 4단계(3052번) (0) | 2022.07.16 |
댓글