Post

[BaekJoon] 8958번 - OX퀴즈 [Java][C++]

[BaekJoon] 8958번 - OX퀴즈 [Java][C++]

문제 링크


1. 문제 풀이


OX퀴즈의 결과에서 점수는 X로 구분할 수 있는 각 맞은 문제 덩어리에 대해 $1$ 부터 덩어리의 크기까지의 합과 같다.


2. 코드


1. 풀이 [Java]

StringTokenizer를 활용해서 X를 기준으로 파싱한 맞은 문제 덩어리 토큰들을 만들었다. 각 토큰의 길이에 대해 합 공식을 적용하면 해결할 수 있다.

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
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int t = Integer.parseInt(br.readLine());
        while (t-- > 0) {
            st = new StringTokenizer(br.readLine(), "X");

            int sum = 0;
            while (st.hasMoreTokens()) {
                int x = st.nextToken().length();
                sum += x * (x + 1) / 2;
            }

            sb.append(sum).append("\n");
        }

        System.out.print(sb);
    }
}


2. 풀이 [C++]

맞은 문제 덩어리의 판별은 X에서 O로 바뀌는 순간을 시작점으로 O에서 X로 바뀌는 순간을 끝점으로 잡고 합 공식을 적용하면 된다. 이때 O로 시작하는 경우와 끝나는 경우도 빼먹지 않게 주의해야 한다.

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
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while (t--) {
        string s;
        cin >> s;

        int sum = 0;
        char prev = '\0';
        int idx = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == 'O') {
                if (prev == 'X') {
                    idx = i;
                }
            } else {
                if (prev == 'O') {
                    int len = i - idx;
                    sum += len * (len + 1) / 2;
                }
            }

            prev = s[i];
        }

        if (s.back() == 'O') {
            int len = (int)s.size() - idx;
            sum += len * (len + 1) / 2;
        }

        cout << sum << '\n';
    }
}

This post is licensed under CC BY 4.0 by the author.