학습 정리/👨‍💻 PS Study

[C] 백준 8958번 - OX퀴즈

무딘붓 2022. 6. 22. 22:39

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

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

www.acmicpc.net

 

8958번 : OX퀴즈 C언어 풀이

 

[문제]

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

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

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

[입력]

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

[출력]

10
9
7
55
30

[소스코드]

#include <stdio.h>

int main() {	

	int n = 0;			
	scanf("%d", &n);	// 테스트 케이스 개수 입력
	getchar();			// 엔터 처리

	char ox[80];

	for (int i = 0; i < n; i++) {
		int cnt = 0, sum = 0, j, k;

		for (j = 0; j < 80; j++) {
			scanf("%c", &ox[j]);
			if (ox[j] == 'O' || ox[j] == 'X');
			else break;	//'O''X' 외의 문자 들어오면 (=엔터 입력) 입력 중단
		}
		for (k = 0; k < j; k++) {
			if (ox[k] == 'O') {
				cnt++;
				sum += cnt;
			}
			else if (ox[k] == 'X') {
				cnt = 0;
			}
		}
		printf("%d\n", sum);
	}		
	
}

처음 풀었을 때 코드인데, 지금 보니 불필요하게 반복문이 많이 사용된 것 같다.

#include <stdio.h>

int main() {	

	int n = 0;			
	scanf("%d", &n);	// 테스트 케이스 개수 입력
	getchar();			// 엔터 처리

	char ox[80];

	for (int i = 0; i < n; i++) {
		int cnt = 0, sum = 0;

		for (int j = 0; j < 80; j++) {
			scanf("%c", &ox[j]);
			if (ox[j] == 'O') {
				cnt++;
				sum += cnt;
			}
			else if (ox[j] == 'X') {
				cnt = 0;
			}
			else break;
		}

		printf("%d\n", sum);
	}		
	
}

scanf로 처음 숫자를 읽어들이고, 엔터를 삭제하기 위해 getchar()를 사용했다.