본문 바로가기

알고리즘/프로그래머스

[PG / C++] 프로그래머스 의상 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577

문제


풀이

카테고리 (Key), 옷 가지수 (Value)로 map에 저장한다.

map에 저장할 때, key가 등록되어 있는지 .find 함수로 조회하고 수를 갱신한다.

없다면, {Key, 1} 값으로 등록한다. 

 

전체 경우의 수는 (카테고리별 옷 가지수 +1) 을 전부 곱한 값이 된다.

옷을 하나씩 고르고, 해당 카테고리에서 고르지 않는 경우의 수를 하나 더해준 값이다.

문제 조건에서 최소 하나 이상의 의상을 입는다고 하였으므로, 옷을 하나도 입지 않는 경우의 수를 빼줘야한다.

#include <bits/stdc++.h>
using namespace std;

int solution(vector<vector<string>> clothes) {
    int ans = 1;
    map<string, int> m; // 카테고리별 옷 가지수 저장
    
    for(auto cloth: clothes){
        if(m.find(cloth[1])!=m.end()){ // 등록되어 있는 경우, 숫자만 증가 
            m[cloth[1]]++; 
        }
        else{
            m.insert({cloth[1], 1}); // 없는 경우, 새로 넣기
        }
    }
    
    for(auto i: m){
        ans*=(i.second+1); // 옷 가지수 + 선택하지 않는 경우 1
    }
    ans-=1; // 아무것도 입지 않는 경우 제외
    
    return ans;
}
반응형