[백준 BOJ] 8958번 OX퀴즈 (C언어)

2022. 2. 2. 15:19PS (Program Solving)/BOJ (백준)

문제 설명

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

 

8958번: OX퀴즈

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

www.acmicpc.net

백준 BOJ 8958번 OX퀴즈 문제 사진

 

접근 방법 - 누적에 따른 연산이 필요한 수학 문제

백준의 8958번 문제는 누적에 따라 덧셈을 가중하는 연산이 필요한 수학 문제이다.

해당 문제에선, O가 연달아 나오는 만큼 점수에 실시간으로 더하면서 최종 점수를 구해야 한다.

필자는 O가 연달아 나온 횟수를 따로 저장하는 변수를 이용하여 덧셈을 수행하면서 최종 답을 구하였다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

 코드의 실행 순서

1) 테스트 케이스의 수(n)를 입력받는다.

 

2) O 또는 X가 나열된 문자열(ch)을 하나씩 입력받는다.

 

3) 점수를 나타내는 sum을 0으로 초기화하면서 선언한다.

추가로, O가 연달아 나온 횟수를 저장할 cnt 변수를 0으로 초기화하며 선언한다.

 

4) 문자열을 탐색한다.

- 탐색한 문자가 O인 경우, cnt에 1을 추가하며 이 cnt를 sum에 더한다.

- 탐색한 문자가 X인 경우, cnt를 0으로 저장한다.

 

5) 4)의 과정을 통해 최종적으로 저장된 sum을 출력한다.

 

6) 모든 테스트 케이스가 2) ~ 5) 과정을 거쳤다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <string.h>

//백준 8958번 코드
int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		char ch[80] = { 0 };
		scanf("%s", &ch);
		
		int sum = 0;	int cnt = 0;
		for (int j = 0; j < strlen(ch); j++) {
			if (ch[j] == 'O') { cnt++; sum += cnt; }
			else { cnt = 0; }
		}
		printf("%d\n", sum);
	}
}

 

제출 결과

백준 BOJ 8958번 OX퀴즈 문제 C 제출 결과

(2021.12.17 백준 8958번 문제 제출 결과)

반응형