(C++/PGS) Lv.2: 위장(해시)

https://school.programmers.co.kr/learn/courses/30/lessons/42578

문제 설명

매일 스파이들은 자신을 위장하기 위해 다른 조합의 옷을 입습니다.

예를 들어 스파이가 다음과 같은 복장을 하고 있고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입고 있다면 다음 날에는 동그란 안경 대신 청바지나 검은색 선글라스를 추가로 착용해야 합니다.

친절한 이름

얼굴 동그란 안경, 검은색 선글라스
맨 위 파란색 티셔츠
바지 청바지
겉옷 롱 코트

스파이가 가지고 있는 옷을 포함하는 2D 배열 옷이 주어졌을 때 옷의 다양한 조합의 수를 반환하는 솔루션 함수를 작성하십시오.


쉽게 봤지만 틀렸어!

경우의 수를 계산하는 공식에 대해 신중하게 생각할 필요가 있습니다.

처음에는 답에 옷의 수를 더하고 종류의 수가 2 이상일 경우의 수를 곱하는 과정을 거쳤다.

히든테크에서 실수를 많이 했어요.

그래서 두 번째 방법에서는 착용하지 않은 경우를 포함하여 각 종류를 곱한 후,

옷을 다 안입은 경우를 하나 빼고 나니 맞았습니다!

수학도 싫어

내 솔루션

#include <string>
#include <vector>
#include <map>
using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map<string, int> clist;
    
    for(int i=0; i<clothes.size(); ++i){
        clist(clothes(i)(1))++;
    }
    for(auto i : clist){
        answer *= (i.second+1); // 안입는경우, 1번입는경우, 2번입는경우, ...
    }
    answer --; // 모두 안입는 경우 제외
    
    return answer;
}