이 문제는 O는 1점, X는 0점이고 연속된 O만큼 점수가 증가하며, 최종 점수를 출력하는 문제입니다.
#include <stdio.h>
#include <string.h>
int main() {
int T;
int score;
int total;
char ox[81];
scanf("%d", &T);
문자열로 OX퀴즈의 결과를 입력받을 것이기 때문에 <string.h>를 추가해줍니다. T는 테스트 케이스의 수이고 score은 문자열의 각 값을 비교해 점수를 결정할 것입니다. total은 출력할 최종점수, ox는 퀴즈의 결과를 입력받을 문자열입니다. 각 테스트 케이스는 길이가 0보다 크고 80보다 작다고 하여 ox의 최대 길이를 81이라고 했습니다.
테스트 케이스의 수를 입력받습니다.
for(int i = 1; i <= T; i++){
scanf("%s", ox);
total = 0;
score = 1;
for문을 만들어 테스트케이스 수 만큼 OX퀴즈의 결과를 ox배열에 입력받습니다. 총점은 0점으로 초기화해주고, score은 1점으로 초기화해줍니다. score을 0점이 아니라 1점으로 초기화한 이유는 다음 코드에서 알 수 있습니다.
for(int j = 0; j < strlen(ox); j++){
if(ox[j] == 'O'){
total += score;
score++;
}
else if(ox[j] == 'X'){
score = 1;
}
}
i for문 안에 j for문을 만들어서 점수 계산을 해줍니다. 문자열의 길이만큼, 즉 문자열의 끝까지 각 값이 O인지 X인지 비교합니다.
만약 O라면 score를 total에 더해주고 score를 1 증가시킵니다. 만약 X라면 스코어를 다시 1로 초기화하고 반복문의 조건식으로 돌아갑니다.
위에서 score를 0으로 설정했다면 배열의 값이 O일 때에 total에 0을 더하게 되기 때문에 1로 초기화했던 것입니다. X일 땐 위에서 증가했던 score의 점수를 다시 1로 초기화만 해주고 total값에는 변화가 없으니 0을 더한 것과 같기 때문에 문제가 없습니다.
printf("%d\n", total);
}
return 0;
}
테스트케이스 수 만큼 결과의 총점인 total을 출력해주고 줄바꿈해줍니다. total값이 계속 중첩되지 않게 총점을 출력하고 나서 다시 위의 i for문 으로 돌아가서 total을 0으로 초기화해줍니다.
출력까지 모두 끝나면 프로그램이 종료됩니다.
이 문제는 다른 문제들에 비해서 어려운 편은 아니었지만 점수를 계산하는 방법을 생각해내는데 시간이 꽤 걸렸습니다. total 변수 없이 만들고 싶었지만 힘든 것 같습니다. 위 방법으로 이 문제를 풀 땐 score이나 total처럼 변수들을 초기화하는데 주의해야 합니다.
백준 1402번 아무래도이문제는A번난이도인것같다 c (0) | 2023.04.09 |
---|---|
백준 1598번 꼬리를 무는 숫자 나열 c (0) | 2023.04.09 |
백준 2609번 최대공약수와 최소공배수 c (0) | 2023.04.09 |
백준 1546번 평균 c (1) | 2023.04.09 |
백준 1259번 팰린드롬수 c (0) | 2023.04.08 |