[baekjoon/c++] 패션왕 신해빈 - 9375 : 수식

제출코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <map>
using namespace std;

map<string,int> clothesMap;

void clothes(int N){
   for (int i = 0; i < N; i++)
   {
       /* code */
       string s1,s2;    
       cin >> s1 >> s2;
       clothesMap[s2]++;
   }
   int answer = 1;
   for (const auto& m: clothesMap){
       // cout << m.first << " " << m.second << "\n";
       answer *= (m.second + 1);
   }
   cout << answer-1 << "\n";
   //초기화
   clothesMap.clear();
}

int main(){
   ios_base::sync_with_stdio(false);
cin.tie(0);
freopen("input.txt", "r", stdin);

   int T,N;
   cin >> T;

   for (int i = 0; i < T; i++)
   {
       /* code */
       cin >> N;
       clothes(N);
   }
   
   return 0;
}

풀이 과정

문자열을 입력받지만, 결국 중요한건 부위별로 몇개의 옷을 가지고 있는지가 중요하다. 한 부위를 중복해서 착용을 하면 안되기에 조합론을 생각해볼 수 있다.

각 부위에서 선택할 수 있는 옷가지 (안 입는 경우를 포함하기에 +1) 들을 각각 모두 곱해주면 모든 경우의 수를 구할 수 있겠다.

다만, 문제에서 발가벗은 경우를 제외하라 하였으니 마지막 답에서 1을 제외하여 문제를 해결하였다.