문제
입력
- 테스트 케이스 개수 T
- 해빈이가 가진 의상의 수 N
- N+2번째 줄부터는 의상의 이름과 의상의 종류
출력
- 해빈이가 입을 수 있는 의상의 경우의 수
- 같은 종류의 옷은 같이 입을 수 없음
풀이
- 의상의 종류와 의상의 이름이 주어지고 같은 종류는 같이 입을 수 없기 때문에 map을 이용해 저장한다.
- 이때 map에는 의상의 종류와 해당 종류의 의상의 개수를 map에 저장한다.
세부 풀이
- 의상의 이름과 의상의 종류(category)를 입력받는다.
- map에 이미 저장된 category인지 map.find 함수와 map.end() 함수를 이용해 찾는다.
- 저장되지 않은 category라면 map에 insert해준다.
- 이미 저장되어 있는 category라면 의상의 개수를 증가시킨다.
- 입을 수 있는 조합의 경우의 수를 계산해 출력한다.
코드
#include <iostream>
#include <map>
using namespace std;
int T,N;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
while (T--) {
map <string, int> map;
string name, category;
cin >> N;
while (N--) {
cin >> name >> category;
if (map.find(category) == map.end()) {
map.insert({category, 1});
} else {
map[category]++;
}
}
int ans = 1;
for (auto m:map){
ans *= (m.second+1);
}
ans -= 1;
cout << ans << '\n';
}
return 0;
}
'Algorithm' 카테고리의 다른 글
백트래킹 (0) | 2024.10.01 |
---|---|
[프로그래머스 level1] 개인정보 수집 유효기간 C++ (0) | 2024.10.01 |
[백준 BOJ] 1806 부분합 C++ (0) | 2024.09.27 |
[백준 BOJ] 17298 오큰수 C++ (0) | 2024.08.01 |
[백준 BOJ] 2792 보석상자 C++ (0) | 2024.07.30 |