BOJ

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

map, 집합

Posted by dongjune on October 5, 2020

문제

9375번 패션왕 신해빈

풀이

  • 의상의 종류마다 개수를 카운트해준다. 9375-1

  • 의상의 종류에 그 의상을 입지 않은 경우의 수를 더해서 모두 곱해주고 모두 안 입은 경우의 수 1을 빼준다. 9375-2

이 문제에서 의상의 이름은 사용되지 않는다. 그냥 의상 종류의 개수만 카운트해주면 된다.
map 자료구조 를 통해 구현했다. map에 key값으로 의상종류를 넣어주고 value 값으로 1을 넣어준다.

1
m.insert({catag, 1});

find 함수를 통해 이미 의상종류가 map에 존재할 경우 value를 1 증가시켜준다.

1
2
3
4
5
6
7
// find 함수는 찾는 key값이 없으면 end 주소를 리턴
if (m.find(catag) == m.end())
{
    m.insert({catag, 1});
}
else
    m[catag]++;

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <string>
#include <iostream>
#include <map>

using namespace std;

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

    int T;
    cin >> T;

    int n;
    string catag, name;

    while (T--)
    {
        map<string, int> m;
        cin >> n;
        while (n--)
        {
            // name은 사용 x
            cin >> name >> catag;
            // find 함수는 찾는 key값이 없으면 end 주소를 리턴
            if (m.find(catag) == m.end())
            {
                m.insert({catag, 1});
            }
            else
                m[catag]++;
        }

        int ans = 1;
        for (auto i : m)
        {
            ans *= (i.second + 1);
        }
        ans -= 1;
        cout << ans << '\n';
    }

    return 0;
}