본문 바로가기

programming/알고리즘 풀이

[백준 알고리즘] 8958번 OX퀴즈

반응형

1. 문제, 실행결과 예시

 

 이번 문제는 나름 간단하게 풀었던 문제이다. 근데 정답률은 별찍기 보다 훨씬 낮다...... 왜지...... 예상해 보자면 아마 문자열 처리 떄문에 그런 것일 수도있다. 흠...... 그것만 빼면 나름 수월하게 풀었다고 생각한다. 다음은 문제의 설명이다.

 

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

 

8958번: OX퀴즈

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

www.acmicpc.net


8958번


 특이한 점은 O의 갯수마다 내용이 중첩 된다는 점이다. 일단 1은 무조건 더해지고, 그 뒤로 하나씩 늘어난다는 것이 특징이다. 다음은 문제 풀이이다.

 

2. 문제풀이

 

  여기서 중요한 점은 O가 연속될 수록 점수가 중첩된다는 점과 X가 나오면 다음 부터 다시 1을 더해야 한다는 점이다. 다시 생각하면 O가 나올때마다 계속 점수를 중첩시키는 변수를 만들었다가 X를 만나면 초기화 시켜야 된다로 해석할 수 있을 것 같다. 그렇게 코드를 짜면 다음과 같은 코드가 나온다.

#include <stdio.h>
#define SIZE 80

int main(void) {
	int input;
	scanf("%d", &input);
	
	for (int i = 0; i < input; i++) {
		char msg[SIZE];
		int score = 0;
		int contin = 0;
		scanf("%s", msg);
		for (int i = 0; msg[i]; i++) {
			if (msg[i] == 'O') {
				contin++;
				score = score + contin;
			}
			else
				contin = 0;
		}
		printf("%d\n", score);
	}
	return 0;
}

 문자열을 다루는 것이 까다로웠다. 사실 생각해보면 한글자씩 비교하려는 용도로 문자열을 다룰 때는 배열에 넣어주는 것도 괜찮다고 생각한다.

 

3. 결어

 

 사실 이 문제를 풀면서 문자열을 다루는 부분에서 잠시나마 버벅거림이 있었다. 아마 C에서의 문자열은 나의 최대의 약점이 아닐까 싶다...... 한번 정리를 해야한다는 생각을 하였다. 나중에 이 블로그에 문자열에 대한 문법을 정리했으면 좋겠다.

반응형