본문 바로가기

백준/C++

[Baekjoon/C++] 27964번 - 콰트로치즈피자

[백준] Baekjoon Online Judge

문제로 이동

 

문제

치즈와 피자에 환장하는 비행씨는 매일같이 치즈피자를 사 먹다가 지갑이 거덜 나고 말았다. 만들어 먹는 것이 사 먹는 것보다 싸다는 것을 안 비행씨는 여러 가지 토핑을 가져와서 직접 피자를 만들어 먹기로 했다.

콰트로치즈피자는 이름 그대로, 서로 다른 네 종류의 치즈가 토핑으로 들어가야 한다. 수많은 치즈피자를 먹어 온 비행씨는 토핑의 이름이 Cheese로 끝나면 이 토핑이 치즈라는 사실을 알고 있다. 비행씨가 가져온 토핑의 목록을 보고, 이 토핑의 일부 혹은 전부를 이용하여 콰트로치즈피자를 만들 수 있는지 답해 보자.

 

입력

첫 번째 줄에 토핑의 개수가 1 이상 100 이하의 정수로 주어진다.

두 번째 줄에는 한 줄로 구성된 토핑의 목록이 주어진다. 각 토핑들은 공백으로 구분되어 있으며, 1개 이상 100개 이하의 영문 대소문자로 구성되어 있다. 대소문자를 구분함에 유의하라.

 

출력

입력으로 주어진 토핑의 목록으로 콰트로치즈피자를 만들 수 있으면 yummy, 만들 수 없으면 sad를 출력하라.

 


풀이

#include <iostream>
#include <unordered_map>
using namespace std;

unordered_map<string, int> m;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N;
    string cheese = "Cheese";

    cin >> N;

    while (N--) {
        string s;
        cin >> s;

        // 토핑의 이름이 Cheese보다 짧은 경우
        if (s.length() < cheese.length()) continue;

        // 토핑의 이름이 Cheese로 끝나는지 확인
        int check = 0;
        for (int i = 0; i < cheese.length(); i++) {
            if (s[s.length() - cheese.length() + i] != cheese[i]) break;
            check++;
        }

        // 토핑의 이름이 Cheese로 끝난다면
        if (check == 6) m[s] = 1;
    }

    // 출력
    if (m.size() >= 4) cout << "yummy\n";
    else cout << "sad\n";

    return 0;
}

 토핑의 이름에 Cheese가 포함된 것만 map에 들어가도록 했다.