[C++] BOJ 13022번: 늑대와 올바른 단어

ㅎㅎ·2023년 8월 29일
0

BOJ

목록 보기
43/65

BOJ 13022번: 늑대와 올바른 단어

문제


문제 풀이

  1. 알파벳 w, o, l, f의 배열을 만들어놓고 각 알파벳의 개수를 구한다. 그 후에는 개수가 모두 똑같이 있는지 검사한다.
  2. 과정 속에서 wolf의 순서가 잘 맞는지 검사한다.

이게 진짜 풀이인가..? 약간 모든 경우의 수를 다 끼워서 넣은 것 같은 그런 느낌이다. 근데 다들 이렇게 풀었더라...

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

char wolf[4] = { 0, };
bool ans = true;

void check() { // 각 알파벳의 개수가 똑같나 확인하는 함수
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            if (wolf[i] != wolf[j]) { ans = false; }
        }
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    string str;
    cin >> str;

    for (int i = 0; i < str.size(); i++) {
        if (str[i] == 'w') { wolf[0]++; }
        else if (str[i] == 'o') { wolf[1]++; }
        else if (str[i] == 'l') { wolf[2]++; }
        else if (str[i] == 'f') {
            wolf[3]++;
            if (str[i + 1] == 'w') { check(); }
        }

        if (i >= 1) { // 순서가 맞는지 검사
            if (str[i] == 'w') {
                if (!(str[i - 1] == 'w' || str[i - 1] == 'f')) { ans = false; }
            }
            else if (str[i] == 'o') {
                if (!(str[i - 1] == 'o' || str[i - 1] == 'w')) { ans = false; }
            }
            else if (str[i] == 'l') {
                if (!(str[i - 1] == 'l' || str[i - 1] == 'o')) { ans = false; }
            }
            else if (str[i] == 'f') {
                if (!(str[i - 1] == 'l' || str[i - 1] == 'f')) { ans = false; }
            }
        }
    }

    check(); // 마지막으로 다시 검사

    if (ans) { cout << 1; }
    else { cout << 0; }

    return 0;
}

profile
Backend

0개의 댓글