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;
}