알고리즘/백준

[C++] 백준 8958번 - OX퀴즈

Esunn 2022. 7. 27. 02:00

 

 

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

 

8958번: OX퀴즈

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

www.acmicpc.net

 

테스트 케이스의 수가 주어지고 그 수만큼 OX답이 나온다.

문제를 연속으로 맞은 만큼 연속된 O개수만큼 점수를 얻는다.

 

예를 들어 OOOXXOXOO 라면은

처음에 O가 3개 연속되니 1 + 2 + 3 이런 식으로 계산된다.

 

#include <iostream>
#include <string>
using namespace std;

int main() {
	int t;
	int len = 0;
	int combo = 0;
	int score = 0;
	string ox;
	cin >> t;

	for (int i = 0; i < t; i++) {
		cin >> ox;
		len = ox.length();
		for (int j = 0; j < len; j++) {
			if (ox[j] == 'O' && combo > 0) {
				combo++;
				score += combo;
			}
			else if (ox[j] == 'O') {
				combo++;
				score++;
			}
			if (ox[j] == 'X') combo = 0;
		}
		cout << score  << "\n";
		score = 0;
		combo = 0;
	}
}

 

먼저 테스트 케이스를 받아주고 그 수만큼 for문을 돌려준다.

문자열을 받고 길이를 확인한 다음 문자열 배열의 각각의 요소를 확인한다.

 

combo라는 변수를 만들어 연속된 정도를 알 수 있게 해 주었다.

 


다른 효율적인 풀이도 있겠지만 개인적으로 나쁘지 않게 푼 문제 중 하나이다.

다른 글도 참고 안 하고 풀었고 구현도 내 생각에서는 나쁘지 않았다.