본문 바로가기

CodingTest/BOJ

[BOJ 8958] 백준 OX퀴즈 풀이 - C++

 

사용언어 :  C++

 

 

 

 

문제풀이

* 연속해서 답을 맞췄을 경우 한 문제당 배점이 높아진다 

 

(1)테스트케이스 만큼 반복문 돌리기

cin >> T;
for (int i = 0; i < T; i++) {
		//
	}

 

(2) 각 문자열 길이 만큼 반복문을 돌리고, 맞았을 경우와 틀렸을 경우를 나누어 생각한다

- 맞았을 경우 : 배점을 +1하고 해당 배점을 총 점수에 더한다

- 틀렸을 경우 : 배점을 0으로 초기화 (맞았을 때 +1함)

		cin >> answer; //string answer (해당 문자열)
		int num = 0; int point = 0; //num:현재 점수 point:현재 배점
		for (int j = 0; j < answer.size(); j++) {
			if (answer[j] == 'O') { //문제를 맞았을 때
				point++;
				num += point;
			}
			else //틀렸을 때
				point = 0;

 

 

 

전체코드

#include <iostream>
#include<string>
using namespace std;
int T; string answer;
int main() {
	cin >> T;
	for (int i = 0; i < T; i++) {
		cin >> answer;
		int num = 0; int point = 0;
		for (int j = 0; j < answer.size(); j++) {
			if (answer[j] == 'O') {
				point++;
				num += point;
			}
			else
				point = 0;
		}
		cout << num << "\n";
	}
}

 

 


총평

배열 관련 문제를 풀기 위해 이 문제를 풀었지만 굳이 필요하지 않은 것 같아서 사용하지 않았다. 따로 자료구조나 알고리즘을 사용하지 않고 수학적인 계산으로 충분히 작성가능한 문제


문제 출처

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

 

8958번: OX퀴즈

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

www.acmicpc.net