[BOJ 백준] 8958 - OX퀴즈 (C++)

문제 바로가기

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


관련 알고리즘

- 해당 없


정답 및 해설

OX퀴즈를 컨셉으로 점수를 계산하는 문제이다.

문제를 간단히 요약하자면 리듬게임이나 격투게임을 할 때 '콤보'를 세어 점수를 계산해야 한다.

연속해서 맞춘 문제의 개수(콤보)를 저장할 변수를 만들고 콤보 수만큼 총점에 더하여 간단히 해결한다.

다만, 이 문제에서는 테스트 케이스(통칭 T)가 한 번의 실행에 여러 개 주어진다.

각 테스트케이스 실행 시마다 관련된 변수를 초기화해야 한다는 점에 유의하자.

C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    int T,tot,combo;
    string S;
    cin>>T;
    while(T--){
        combo=0,tot=0;
        cin>>S;
        for(char res : S){
            if(res=='O')
                combo++;
            else if(res=='X')
                combo=0;
            tot+=combo;
        }
        cout<<tot<<'\n';
    }
}

 

Line 해설
4~5 문제 풀이에 사용할 변수를 정의한다.
int T : 테스트케이스의 개수
int tot : 해당 테스트케이스의 최종 점수
int combo : 연속으로 맞춘 문제의 개수
string S : 해당 테스트케이스의 OX결과 문자열. "OOXXOXXOOO" 와 같이 입력됨
6~7 테스트케이스의 개수(T)를 입력받고 while(T--) 문으로 테스트케이스만큼 풀이를 반복한다.
8 위에서 언급했던 것처럼 테스트케이스를 새로 입력받을 때마다 관련된 변수를 초기화해주어야한다.
9~16 OX결과표를 문자열 S에 입력받고 for-each 구문으로 결과표의 문자하나하나씩 검사하며 점수를 계산한다.
이번 퀴즈 결과(res)가 'O'이면 combo 변수를 1 증가시키고, 'X'이면 콤보를 초기화한다.
그 후 최종 점수(tot)에 현재 콤보만큼 점수를 더해주어 최종 점수를 구한다.
17 점수를 출력하고 다음 테스트케이스의 정답출력을 위해 줄바꿈을 해주어야한다.