[BOJ] C++ 9375 패션왕 신해빈 - 해시 맵 사용하기, 수학
2023. 8. 9. 15:30ㆍ알고리즘/문제풀이
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face
answer :
5
3
해빈이의 옷을 종류별로 입을 수 있는 최대 가짓수를 계산하는 문제이다. 알몸은 안되며, 종류별로 착용하지 않을 수도 있다. 확률과 통계 시간에 종종 풀어본 유형의 문제인데, 해빈이 옷이 1번 종류 4개, 2번 종류 2개, 3번 종류 2개가 있다고 하면, 각 종류별로 입지 않는 경우 한 개씩을 추가해서 5 * 3 * 3을 하면 옷을 입지 않는 것을 포함 가능한 모든 조합의 수이다. 여기서 옷을 입지 않는 경우를 빼주면 답이 된다.
알고리즘은 이렇게 짜면 되는데, 구현이 문제다. 사실 옷의 이름은 필요가 없다. 종류별로 몇 개가 있는지 세주고 1씩 더해서 곱해주면 된다. 그냥 벡터로 구현하는 것보다 맵을 이용 해서 옷의 종류를 키로 사용한다면 탐색이 빨라 실행 시간이 많이 줄어든다. 해시 맵을 까먹지 말고 항상 사용할 수 있나 고민해 보자.
/** 수학 9375 패션왕 신해빈 **/
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
vector<int> res;
while (T--)
{
int n;
cin >> n;
map<string, int> m;
for (int i = 0; i < n; i++)
{
string str1, str2;
cin >> str1 >> str2;
// 맵에 str2 키가 없다면 추가
if (m.find(str2) == m.end())
{
m.insert({str2, 1});
}
else
{
m[str2]++;
}
}
int result = 1;
for (auto x = m.begin(); x != m.end(); x++)
{
result *= (x->second + 1);
}
res.push_back(result - 1);
}
for (auto x : res)
cout << x << "\n";
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
[BOJ] C++ 24060 알고리즘 수업 - 병합 정렬 1 (0) | 2023.08.18 |
---|---|
[BOJ] C++ 7662 이중 우선순위 큐 (0) | 2023.08.09 |
[BOJ] C++ 1744 수 묶기 - 조건에 따라 분류하며 정렬하기 (0) | 2023.08.09 |
[문제풀이] int, long long 오버플로우, 시간초과 관련 미세 팁 (0) | 2023.08.06 |
[BOJ] C++ 15903 카드 합체 놀이 - 우선순위 큐와 오버플로우 조심하기 (0) | 2023.08.06 |