오늘의 알고리즘

[C++] 백준 9375 패션왕 신해빈

하늘하늘 . 2022. 9. 17. 19:26
#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
 
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
 
    int T = 0;
    std::cin >> T;
 
    for (int i = 0; i < T; ++i)
    {
        std::unordered_map<std::string, int> unMap = {};
        int N = 0;
        std::cin >> N;
 
        if (!N)
        {
            std::cout << N << "\n";
            continue;
        }
 
        for (int j = 0; j < N; ++j)
        {
            std::string s1 = {};
            std::string s2 = {};
            std::cin >> s1 >> s2;
 
            ++unMap[s2];
        }
 
        int iCount = 1;
        for (auto iter = unMap.begin(); iter != unMap.end(); ++iter)
        {
            iCount *= (iter->second + 1);
        }
 
        std::cout << iCount - 1 << "\n";
    }
 
    return 0;
}

N개가 0개일 때는 아예 없기 때문에 처음부터 0으로 하고 continue로 넘겼습니다.

 

같은 이름의 의상 종류로 묶었습니다. (이름은 신경 안쓴 이유는 같은 이름은 없다고 했기 때문)

2개의 종류로 나뉘고 종류의 갯수가 3개, 2개로 나뉜다면 3개 x 2개 6개가 가능합니다.

거기서 아무것도 입지 않은 것은 빼야하기 때문에 -1을 해줬습니다.