본문 바로가기

BAEKJOON/구현

백준 8958번 [OX퀴즈](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 8958 [OX퀴즈]


문제 링크: https://www.acmicpc.net/problem/8958

문제 설명:

OX 퀴즈의 결과가 문자열로 주어질 때, 연속된 O의 점수를 계산하여 총 점수를 출력하는 프로그램을 작성하세요.

점수 계산 방식은 다음과 같습니다:

  • O가 연속으로 등장할 경우, 첫 번째 O는 1점, 두 번째 O는 2점, 세 번째 O는 3점... 과 같이 증가합니다.
  • X가 등장하면 연속 점수는 초기화됩니다.

입력 조건:

  • 첫째 줄에 테스트 케이스의 개수 N이 주어집니다. (1 ≤ N ≤ 100)
  • 둘째 줄부터 N개의 줄에 OX 퀴즈의 결과가 문자열로 주어집니다. 문자열 길이는 80을 넘지 않습니다.

출력 조건:

  • 각 테스트 케이스마다 점수를 출력합니다.

문제 해결 코드


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

int main() {
    int n; // 테스트 케이스 개수
    cin >> n;

    for (int i = 0; i < n; i++) {
        string result; // OX 문자열
        cin >> result;

        int cnt = 0;       // 연속된 O의 점수를 계산하기 위한 변수
        int resultSum = 0; // 현재 문자열의 총 점수

        for (int j = 0; j < result.size(); j++) {
            if (result[j] == 'O') {
                cnt++;           // O가 연속되면 점수 증가
                resultSum += cnt; // 총 점수에 추가
            } else {
                cnt = 0; // X가 나오면 연속 점수 초기화
            }
        }

        cout << resultSum << endl; // 결과 출력
    }

    return 0; // 프로그램 정상 종료
}

코드 설명

위 코드는 OX 퀴즈 문자열의 점수를 계산하여 출력합니다.

  • 변수 사용:
    • `cnt`: 연속된 O의 개수를 세는 변수입니다.
    • `resultSum`: 현재 문자열의 총 점수를 저장하는 변수입니다.
  • 점수 계산:
    • O가 나오면 `cnt`를 증가시키고, 이를 `resultSum`에 더합니다.
    • X가 나오면 `cnt`를 0으로 초기화하여 연속 점수를 끊습니다.
  • 출력: 각 문자열에 대한 총 점수를 계산한 뒤 출력합니다.

시간 복잡도 분석:

  • 입력 문자열의 총 길이를 L이라 할 때, 각 문자열에 대해 O(L)의 시간이 소요됩니다.
  • 테스트 케이스가 N개이므로 총 시간 복잡도는 O(N × L)입니다.

결과

다음은 입력 예시와 출력 결과입니다:

입력:
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

출력:
10
9
7
55
30

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST