C/백준알고리즘

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

Sehyeok20 2021. 1. 21. 10:27
반응형

백준알고리즘 #8958 문제

OX퀴즈의 점수를 구하는 문제이다

단순히 O의 개수를 구하는 문제가 아니라 O가 연속될수록 점수가 1점 2점 3점... 으로 늘어나기 때문에 주의해야 한다.

 

먼저 입력조건에 80보다 작다고 했으니 80의 크기를 가진 배열을 생성해준다.

각 점수를 넣을 score 변수와 점수를 합할 sum변수도 만들어준다.

#include <stdio.h>
#include <string.h>

int main() {
	int n;
	int score, sum;
	char str[80];
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		sum = 0;
		score = 0;
		scanf_s("%s", str, 80);
		for (int j = 0; j < strlen(str); j++) {
			if (str[j] == 'O') {
				score++;
				sum += score;
			}
			if (str[j] == 'X') {
				score = 0;
			}
		}
		printf("%d\n", sum);
	}
}

매 테스트 케이스마다 sum 과 score를 0으로 초기화 해주고 테스트 케이스에서 입력한 OX결과표를 str 배열에 넣어준다.

 

위의 코드에서 조심해야할 코드는 아래의 scanf_s이다.

scanf_s("%s", str, 80);

문자열을 입력받을 때 주의할 점은

1. &를 사용하지 않는다

2. _s함수를 사용 할 때는 사용자의 입력이 메모리의 크기를 넘어서는 문제를 막기 위해 메모리의 크기를 명시해준다.

여기서는 str의 크기가 80이므로 80으로 명시해주었다.

for (int j = 0; j < strlen(str); j++) {
...
}

다음으로는 위의 strlen()함수이다. 이 함수를 사용하기 위해서는 다음과 같은 헤더를 추가해주어야 한다.

#include <string.h>

이 함수는 문자열의 길이를 반환해주는 함수이다.

for문이 입력한 문자열 만큼의 길이만큼만 반복할 수 있게 해준다.

for문 안에서 str[0]부터 차례대로 반복하며 O인경우 score 점수를 1점씩 증가시키고

sum(총합) 과 score를 더해준다.

X인 경우에는 연속된 O가 끊기므로 score를 0으로 다시 초기화 시켜주면 된다.

반응형