오리 - 12933

2025. 2. 12. 15:19PS/백준

문제

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

느낀점

상당히 재밌다고 생각했다. 들어오는 문자와 바로 앞에 있는 문자를 비교해서 원래 문자에 넣을 지 새로운 문자를 생성할 지 판단해주고 아닌 경우에 실패했다고 출력하면 되었다.

풀이

#include <iostream>
#include <string>
#include <vector>

int judge(std::vector<std::string> &cnt, char c)
{
    for (size_t i = 0; i < cnt.size(); i++)
    {
        char back = cnt[i].back();
        // std::cout << "back: " << back << " c: " << c << "\n";
        // std::cout << i << " : " << cnt[i] << "\n";
        if (c == 'q' && back == 'k' || c == 'u' && back == 'q' || c == 'a' && back == 'u' || c == 'c' && back == 'a' || c == 'k' && back == 'c')
        {
            cnt[i] += c;
            // std::cout << "cnt: " << cnt[i] << "\n";
            c = '-';
        }
    }
    if (c == 'q')
    {
        // std::cout << "empty next q: " << c << "\n";
        std::string temp = "";
        temp += c;
        cnt.push_back(temp);
        // std::cout << "cnt size: " << cnt.size() << "\n";
        c = '-';
    }

    if (c != '-')
    {
        return -1;
    }

    return 0;
}

int main()
{
    std::string reference;
    std::cin >> reference;
    std::vector<std::string> cnt;
    std::string s = "";

    for (size_t i = 0; i < reference.size(); i++)
    {
        // std::cout << "==============" << "\n";
        if (cnt.empty())
        {
            if (reference[i] != 'q')
            {
                std::cout << -1;
                return 0;
            }
            // std::cout << "first s: " << reference[i] << "\n";

            s += reference[i];
            cnt.push_back(s);
        }
        else
        {
            // std::cout << "next s: " << reference[i] << "\n";
            if (judge(cnt, reference[i]) < 0)
            {
                std::cout << -1;
                return 0;
            }
        }
    }
    int answer = 0;
    for (size_t i = 0; i < cnt.size(); i++)
    {
        if (cnt[i].back() != 'k')
        {
            std::cout << -1;
            return 0;
        }
        answer++;
    }
    std::cout << answer;

    return 0;
}

'PS > 백준' 카테고리의 다른 글

팰린드롬 만들기 - 1254  (0) 2025.02.12
비슷한 단어 - 2607  (0) 2025.02.12
앵무새 - 14713  (0) 2025.02.12
222-풀링 - 17829  (0) 2025.02.12
마인크래프트 - 18111  (0) 2025.02.12