문제 풀이/BOJ 문제 풀이

[BOJ알고리즘, C++]#9375_패션왕 신해빈, um, 경우의 수

Hardii2 2024. 3. 7. 11:50

 

#1. 문제

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

 


 

#2. 풀이

 

1. unordered_map 컨테이너

 

[Basic C++] #72_unordered_map

#1. 개념 1. unordered_map [정의] : unordered_map은 C++ STL에서 제공하는 연관 컨테이너입니다. [특징] : unordered_map은 key와 value를 쌍으로 해시 자료구조에 저장합니다. [map과 차이점] : unordered_map은 내부적

webddevys.tistory.com

 

um 컨테이너는 C++ 표준라이브러리에서 제공하는 연관 컨테이너입니다. um 컨테이너는 키와 값을 한 쌍으로 해시 자료구조에 저장합니다.

 

2. 한 의상 종류 당 경우의 수는 개수+1입니다.

 

  1. 먼저, 각 의상 종류를 Key로, 그 개수를 값으로 선언하고, 입력을 받습니다.
  2. 그리고, um 컨테이너를 반복자를 활용하여 순회하며 각 의상 종류에 해당되는 의상 개수+1을 곱해주어 최종 값을 얻고, 이 값에서 '모든 의상을 입지 않은 상태'의 경우 한 개를 빼주어 결과를 출력합니다.

 


 

#3. 코드

 

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

int T;

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

    cin >> T;

    while (T--)
    {
        int N;
        cin >> N;

        unordered_map<string, int> um;

        while (N--)
        {
            string name, type;

            cin >> name >> type;
            um[type]++;
        }

        int ans = 1;
        for (auto it = begin(um); it != end(um); ++it)
        {
            ans *= (it->second + 1);
        }

        cout << ans - 1 << '\n';
    }

    return 0;
}