알고리즘 문제 풀이

36. C++ 백준 8958 번 OX 퀴즈. feat. C++ string

코딩하는 덕구 🐶 2022. 1. 23. 18:08
728x90

안녕하세요! 코딩하는 덕구입니다~!

OX 퀴즈의 결과를 일차원 배열로 입력받아 점수를 계산하는 문제인 C++ 백준 8958 번 입니다~!

문제

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

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

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

입력

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

출력

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

 

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

 

8958번: OX퀴즈

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

www.acmicpc.net

 

#include<iostream>  //입출력을 위한 헤더 파일
#include<string>	//string 을 사용하기 위한 헤더 파일
using namespace std;
int main() {
    int N, cnt = 0, arr[10000] = {0,};
    string word; //문자열을 받을 변수 word 생성
    cin>>N;
    for(int i = 0; i<N; i++){
        cin>>word; 		//문자열인 string을 입력 받음
        
        for(int j = 0; j<word.length(); j++){
            if(word[j] == 'O'){ //문자열의 i번째 성분이 'O' 이면
                if(j == 0)
                    arr[j] = 1; //(처음이면 점수는 1)
                else
                    arr[j] = arr[j-1] + 1; //(처음이 아니면 저번 점수 +1)
            }

            cnt = cnt + arr[j]; //모든 점수들의 합 
        }

        for(int j = 0; j<word.length(); j++) //점수 기록했던 배열 0으로 초기화
            arr[j] = 0;

        cout<<cnt<<endl; //점수들의 합 출력
        cnt = 0;		//점수들의 합 초기화
    }
    return 0;
}

 

먼저 문자 순서별 점수를 저장할 배열 arr 를 선언하고 기본값을 0으로 두었습니다!

그 다음 문자열을 저장할 변수 word를 선언했습니다!

자료형은 string인데 string 자료형을 사용하기 위해서는

string 헤더를 불러와야 사용할 수 있습니다! 맨 위에 보시면 #include<string> 보이시죠!

string 변수는(문자열) 배열처럼 한글자씩 접근할 수 있는데

 

#include <iostream>
#include <string>

using namespace std;
int main() {
    string word = "apple";

    for(int i = 0; i<word.length();i++)
        cout<<word[i]<<endl;
    return 0;
}

word.length() 는 문자열의 길이를 나타내주는 메서드(동작)고 for 문을 이용해

word[0]~word[4] 출력해주면

a p p l e 문자 하나씩 출력 되는것을 알 수 있습니다~!

이때 word[숫자]의 형식인 char 형식으로 출력됩니다!

 

이와 같은 방법으로 string에 OXOXOXOX와 같은 형식의 문자열을 입력받고

O나 X같은 문자 하나씩 접근하여 O이면 점수를 주고 X면 무시하는(기본값을 0으로 해놓았기 때문에 처리 안해줘도 됨)

알고리즘을 작성했습니다!

 

기본적으로 점수 산정하는 알고리즘은 현재 문자가 O 일때 저번 문자의 점수 + 1을 해서 만들어 주었고,

예외처리로 처음문자인데 문자가 O 인 경우에는 점수를 1를 고정해주었습니다! (저번 문자가 없기 때문)

 

점수를 저장하는 공간들은 문자열을 여러번 입력받아야 하기 때문에 for 루프 안의 맨 마지막 부분에서 0으로

초기화 해주었습니다! 

 

C++ 백준 8958 번 이었습니다~! 감사합니다!

728x90