Koalitsiya 2023. 1. 10. 17:24
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

각 옷의 종류마다 몇 개씩 있는지만 구하면 되는 문제이다.

이후 종류별 옷의 수 + 1을 곱하면 해당 옷들로 할 수 있는 조합의 수가 나온다.

그리고 하루에 최소 한 개의 의상은 입는다는 조건이 있으므로 어떤 옷도 입지 않는다는 경우를 제외하면 조건에 맞는 답이 나온다.

 

예를 들어 아래의 표처럼 옷을 가지고 있을 때 문제의 조건을 만족하는 서로 다른 옷의 조합의 수는 (5 x 3 x 2) - 1이다.

얼굴 face1, face2, face3, face4
상의 top1, top2
겉옷 outerwear1

 

풀이방법

1. string형을 Key로 int형을 value로 가지는 m을 선언한다.

2. clothes 벡터를 순회하며 의상의 이름은 필요하지 않으므로 같은 종류의 의상이 나올때마다 m[clothes[i][1]]++ 해준다.

3. answer에 m의 value에 +1한 값을 곱한다.

4. 반복문이 끝나면 answer--를 하고 answer를 리턴

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    
    map<string, int> m;
    
    for(int i = 0; i < clothes.size(); i++) {
        m[clothes[i][1]]++;
    }
    
    for(auto cloth = m.begin(); cloth != m.end(); cloth++) {
        answer *= (cloth->second + 1);
    }
    answer--;
    
    return answer;
}