풀이
핵심은 선택하지 않는 경우를 고려해야 한다.
입출력 예시를 보면
headgear에는 yellowhat, green_turban 2개
eyewear에는 bluesunglasses 1개
위장을 하려면 headgear만 쓰거나 eyewear만 쓰거나 혹은 headgear, eyewear 같이 쓰는 경우다.
그런데 headgear만 쓴다는 것은 eyewear는 쓰지 않는다는 것을 의미하니 다음과 같이 생각할 수 있다.
[headgear, x]
[eyewear, x]
[headgear, eyewear]
위를 고려하면,
heargear는 기존 2개에 +1(선택하지 않는 경우) => 3개
eyewear는 기존 1개에 +1(선택하지 않는 경우) => 2개
두 옷을 골라서 조합하면
3 x 2 = 6가지가 나오게 되는데, 위장은 최소 한 개의 옷은 입어야 하므로 마지막의 경우에 [x, x] 는 빼줘야 한다.
따라서 6 - 1 = 5가지가 나오게 된다.
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<vector<string>> clothes) {
map<string, int> m;
for(auto v : clothes) {
m[v[1]]++;
}
int answer = 1;
for(auto iter = m.begin(); iter != m.end(); iter++) {
answer *= (iter->second + 1);
}
return answer - 1;
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] 방문 길이 (C++) (0) | 2021.06.04 |
---|---|
[프로그래머스] 영어 끝말잇기 (C++) (0) | 2021.06.04 |
[프로그래머스] 괄호 회전하기 (C++) (0) | 2021.05.31 |
[프로그래머스] 예상 대진표 (C++) (0) | 2021.05.31 |
[프로그래머스] 소수 찾기 (C++) (0) | 2021.05.22 |