WalkerJei's Lifelog

백준알고리즘 8958번 OX퀴즈 C# 본문

소프트웨어 개발/코딩테스트(기성 문제)

백준알고리즘 8958번 OX퀴즈 C#

WalkerJei 2025. 3. 12. 16:37

세부 정보

  • 사이트: 백준알고리즘
  • 번호: 8958
  • 문제명: OX퀴즈
  • 언어: C#
  • 분류: 구현, 문자열
  • 비고: 

 

문제

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

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

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

 

입력

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

 

출력

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

 

풀이

Substring(j, 1)의 의미는 추출 대상 문자열의 j번째 위치에서 1개를 출력하는 것이다. 추출 문자열이 obama일 때 Substring(0, 1)로 하면 o가 추출되고 Substring(2, 1)로 하면 a가 추출된다.

Substring(j , 0)으로 하면 아예 추출이 되지 않으니 주의해야 한다.

// 테스트 케이스 개수 입력
int testCase = Convert.ToInt32(Console.ReadLine());
// 퀴즈 풀이
string[] quiz = new string[testCase];
// 점수
int[] score = new int [testCase];
// 연속 정답 보너스
int[] bonus = new int [testCase];

// 퀴즈 풀이 입력
for (int i = 0; i < quiz.Length; i++)
    quiz[i] = Console.ReadLine();

// 퀴즈의 개수만큼 반복 처리
for(int i = 0; i < quiz.Length; i++)
{
    // 퀴즈 배열 내 문자열 길이만큼 반복 처리
    for (int j = 0; j < quiz[i].Length; j++)
    {
        // Substring으로 O를 추출하는 데 성공하면
        if (quiz[i].Substring(j, 1) == "O")
            //연속 정답 보너스 1 상승
            bonus[i]++;
        // O가 추출되지 않으면
        else
            // 연속 정답 보너스를 0으로 초기화
            bonus[i] = 0;
        // 연속 정답 보너스에 따라 점수 추가
        score[i] += bonus[i];
    }
}

// 퀴즈 점수 출력
for(int i = 0;i < score.Length; i++)
    Console.WriteLine(score[i]);

 

후기

Substring을 활용하는 방법을 알았는데 보너스 점수를 배열로 하지 않고 그냥 풀었다가 이상한 결과만 나온 채 제한시간이 끝나버렸다. 그나마 다행이도 다른 사람의 소스코드를 보지 않은 채 왜 문제가 생겼는지 찾아내는 데 성공했다. 이게 바로 스스로 터득하는 것이다. 심지어 원인 탐색을 10분도 안 되어서 성공했다.