반응형
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
코드
#include <stdio.h>
int main() {
int N,sum;
char a[80];
int score;
scanf("%d",&N);
while(N != 0) {
sum = 0;
score = 1;
scanf("%s",a);
char *ok = a;
while(*ok) {
if(*ok == 'O') {sum += score; score++;}
else{score = 1;}
ok++;}
printf("%d\n",sum);
N--;}
return 0;
}
☞ 풀이 전
O와 X를 입력받아야하기 때문에 문자열의 아이디어가 들어가야겠다고 생각하였습니다. 동작 횟수는 while문을 이용하였고 문자열을 끝까지 입력받는 방식은 while문을 이용하여 NULL값이 아닐 때 까지 입력받는 것으로 설정하였습니다.
두 번째 while문 안의 조건문을 구성하는데 시간이 엄청나게 걸렸습니다. 혼자 복잡하게 생각해서 이상하게 코드를 짜고 지우고.. 간단하게 나타낼 수 있는 코드였는데 왜 생각을 못 해냈는지 모르겠습니다.
☞ 왜?
O가 연속된다면 어떻게 처리할지 연속되지 않는다면 어떻게 처리할 지 조금만 고민해보면 되는 문제였습니다. 연속되는 O값과 독립적인 O의 개수를 받아 연속되는 O는 등차수열을 쓰려고 했고 독립적인 O는 따로 계산하여 더해주려고 했었는데 간단히 풀 수 있는 문제였습니다. 문자열에 대한 이해가 필요한 문제였습니다.
☞ 다른 사람의 코드
#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);
}
}
출처 : 집사소현과 재냥이(https://develop247.tistory.com/16)
도저히 고민하다가 보고 참고한 코드입니다. string헤더 파일을 사용하여 strlen함수를 이용해 한 문자씩 받아 처리하였습니다.
반응형
'Baekjoon' 카테고리의 다른 글
[C]백준 15596번 : 정수 N개의 합 (0) | 2023.01.05 |
---|---|
[C] 백준 4344번 : 평균은 넘겠지 (0) | 2023.01.04 |
[C] 백준 1546번 : 평균 (0) | 2022.08.16 |
[C] 백준 3052번 : 나머지 (0) | 2022.08.16 |
[C] 백준 2439번 : 별 찍기 - 2 (0) | 2022.08.13 |