티스토리 뷰

PS 이야기/PS - BOJ

[BOJ] 8958번 - OX퀴즈

whatisyourname 2022. 4. 4. 13:06
반응형

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

 

8958번: OX퀴즈

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

www.acmicpc.net

문제

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

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

제한

시간 제한 : 1초 / 메모리 제한 : 128MB


1. 어떻게 풀까?

1-1) 연속된 O를 어떻게 처리할까?

이 문제는 단순히 'O'의 개수를 세는 것을 넘어서, O가 연속되면 추가 점수를 주어야 한다는 것이 핵심이다.

각 테스트 케이스의 단어 별로 한 글자씩 가져오고, 얼마나 연속적으로 O가 있는가 세는 변수 streak를 추가하였다.

만약 현재 글자라 'O'라면 점수에 현재 streak를 더해주었고, streak를 1만큼 증가시켜 연속되게 'O'가 있다는 것을 추가하였다.

만약 현재 글자가 'X'라면 streak를 0으로 초기화시킨다.

마지막에 최종 점수를 출력으로 내보내면 맞았습니다! 를 받을 수 있다.

2) 최종 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int T;
    string words;
    int streak = 0;
    int point;
 
    cin >> T;
    while (T--) {
        cin >> words;
        point = 0;
        streak = 0;
 
        for (auto word: words){
            if (word == 'O') {
                streak++;
                point += streak;
            } else {
                streak = 0;
            }
        }
        cout << point << "\n";
    }
 
    return 0;
}
cs

 

반응형

'PS 이야기 > PS - BOJ' 카테고리의 다른 글

[BOJ] 10809번 - 알파벳 찾기  (0) 2022.04.04
[BOJ] 9498번 - 시험 성적  (0) 2022.04.04
[BOJ] 3052번 - 나머지  (0) 2022.04.04
[BOJ] 2920번 - 음계  (0) 2022.04.04
[BOJ] 2908번 - 상수  (0) 2022.04.04
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함