문제 풀이
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<vector<string>> clothes) {
// map<의상의 종류, 의상 갯수>
map<string, int> m;
// 이후 곱셈을 사용하기 위해 answer를 1로 초기화
int answer = 1;
// 의상의 종류만 확인하면 되기 때문에 clothes 배열에서 의상 종류만 가져온 후
// 각 의상의 개수를 더한다.
for(vector<string> i : clothes)
m[i[1]]++;
// 하단 설명 참조
for(auto it : m)
answer *= (it.second + 1);
return answer - 1;
}
여기에서는 (a+1)(b+1)(c+1)...-1라는 공식을 사용하였습니다.
예를 들어 headgear가 5개, eyewear가 3개 있다고 해봅시다. headgear 부분에서 5개 중 하나를 고르거나 입지 않는 경우, (5+1)의 식이 탄생합니다. (5(옷의 개수) + 1(입지 않는 경우))가 되겠지요. 이어서 eyewear의 경우에도 (3 + 1)의 식이 나올 수 있지요. 이를 대수식으로 표현하면 (a+1) * (b+1) 의 식이 나옵니다.
마지막으로 리턴값을 보면 answer에 -1이 붙어있습니다. 이는 "아무것도 입지 않은 경우"를 제외하기 위함입니다.
문제 링크
programmers.co.kr/learn/courses/30/lessons/42578?language=cpp
'C++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [C++] 기능개발 (0) | 2020.11.23 |
---|---|
[프로그래머스] [C++] 주식가격 (0) | 2020.11.19 |
[프로그래머스] [C++] 베스트앨범 (0) | 2020.11.19 |
[프로그래머스] [C++] 전화번호 목록 (0) | 2020.11.18 |
[프로그래머스] [C++] 완주하지 못한 선수 (0) | 2020.11.18 |