알고리즘/문자열

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

키베이루 2022. 12. 29. 15:34

1) 문제설명

 

2) 아이디어

앞에있는 의상의 이름은 고려할 필요없이 뒤에있는 의상의 종류만 고려하면 된다. -> MAP을 사용

첫번째 예제의 경우

(hat), (turban), (sunglasses), (hat,sunglasses), (turban, sunglasses)으로 5개

headgear, headgear, X(아무것도 입지 않음)

eyewear, X

로 경우의수를 계산하여 3 * 2 = 6에 아무것도 입지않았을때 (X,X)를 빼버리면 된다. 6 - 1 = 5

두번째 예제의 경우

(mask), (sunglasses), (makeup)으로 3개

FACE, FACE, FACE, X

X

4 * 1 = 4에 (X,X)일때를 빼면 4 - 1 = 3

 

3) 코드

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<map>
#include<string>
using namespace std;
map<string, int> mp;

int main() {
	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		int n;
		cin >> n;
		for (int j = 0; j < n; j++) {
			string name, kinds;
			cin >> name >> kinds;
			mp[kinds]++;
		}
		int temp;
		int mul = 1;
		for (auto i = mp.begin(); i != mp.end(); i++) {
			//cout << i->second << endl;
			temp = i->second + 1;
			mul = mul * temp;

		}
		mp.clear();
		cout << mul - 1 << endl;	
	}
	
}