본문 바로가기

C++/프로그래머스

[프로그래머스] [C++] 위장

문제 풀이

#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

 

코딩테스트 연습 - 위장

 

programmers.co.kr