백준 13022번 늑대와 올바른 단어

김두현·2022년 12월 6일
1

백준

목록 보기
39/135
post-thumbnail
post-custom-banner

🔒[문제 url]

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


🪄전체 코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> // cpp
#include <string>
// 자료 구조
#include <map>
using namespace std;

string str;
int idx[4] = { 'w', 'o', 'l', 'f' };
int cnt[4]{ 0, }; // w o l f
map<char, int> M;

void INPUT()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> str;
    M.insert({ 'w', 0 });
    M.insert({ 'o', 1 });
    M.insert({ 'l', 2 });
    M.insert({ 'f', 3 });
    M.insert({ 'L', 4 });

}

bool allSame(char e)
{// w o l f 순서 지켜지고있는지 확인 && 모두 같은 갯수인지 확인
    int lastIdx = M[e];
    for (int i = 0; i < lastIdx - 1; i++)
        if (cnt[i] != cnt[i + 1])
            return false;
    return true;
}

void init()
{// 올바른 부분 문자열을 발견하면 cnt 초기화
    for (int i = 0; i < 4; i++) cnt[M[idx[i]]] = 0;
}

void SOLVE()
{
    // 첫 글자가 w가 아니면 0 출력
    if (str[0] == 'w') cnt[M['w']] = 1;
    else { cout << 0; return; }

    for (int i = 1; i < str.length(); i++)
    {
        // w가 없는데 다른 문자를 읽은 경우
        if (cnt[M['w']] == 0 && str[i] != 'w')
        {
            cout << 0;
            return;
        }

        // 앞 글자와 다른 글자일 경우
        if (str[i] != str[i - 1])
        {
            // 순서가 지켜졌고, 모든 갯수가 같은 경우
            if (allSame(str[i]))
            {
                // w를 읽었다면 올바른 부분 문자열을 발견한 것이므로
                if (str[i] == 'w')
                {
                    // cnt 초기화 후 cnt 갱신
                    init();
                    cnt[M['w']] = 1;
                }
                // w가 아니라면 갯수 갱신
                else cnt[M[str[i]]]++;
            }
            // 순서가 지켜지지 않았거나 갯수가 맞지 않는다면 0 출력
            else { cout << 0; return; }
        }
        // 앞 글자와 같을 경우 갯수 갱신
        else cnt[M[str[i]]]++;


    }
    // 갯수가 모두 같은지 확인
    if (allSame('L')) cout << 1;
    else cout << 0;
}


int main()
{
    INPUT();

    SOLVE();
}

🥇문제 후기

GOLD5 미만 난이도는 알고리즘 및 풀이 설명을 주석으로 대체합니다.
주석을 참고해주세요.


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM
post-custom-banner

0개의 댓글