Problem Solving

[백준-c++] 8958번 : OX퀴즈

Dev_en 2021. 11. 19. 01:43

답안

첫 번째 시도(실패) - 아직도 반례를 모르겠다.. 어디서 틀린 건지 아시는 분 알려주시면 감사하겠습니다(__)

더보기
더보기
#include <iostream>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);

    int n;
    int seq=0, score=0;
    
    cin >> n;
    char ox[n][81];
    
    for(int s=0; s<n; s++){
        cin >> ox[s];
    }
    
    for(int s=0; s<n; s++){
        int i=0;
        score=0;
        while(ox[s][i] != '\0'){
            seq=0;
            while(ox[s][i] == 'O'){
                seq++;
                score += seq;
                i++;
            }
            i++;
        }
        cout << score << '\n';
    }
    
    return 0;
}

 

두번째 시도(성공)

#include <iostream>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);

    int n;
    
    cin >> n;
    char ox[81];
    
    for(int s=0; s<n; s++){
        cin >> ox;

        int score = 0; //총점
        int flag=0; //연속 O 여부
        int seq_score=1; //연속 O일 때 추가될 점수
        
        for(int i=0; ox[i] != '\0'; i++){
            if(ox[i] == 'O'){
                flag=1;
                score += seq_score;
            }
            else{
                flag=0;
                seq_score=1;
            }
            if(flag==1){
                seq_score++;
            }
        }
        cout << score << endl;
    }

    return 0;
}

느낀 점

  • 다중첩반복문은 flag를 잘 쓰면 한 단계 줄일 수 있다.
  • 변수 초기값 설정은 생각보다 중요하다.

 

궁금한 점

  • 배열 크기를 입력 문자열 크기에 맞게 동적으로 할당하는 방법은?