[프로그래머스 Lv2] 의상

수민이슈·2023년 7월 3일
0

[C++] 코딩테스트

목록 보기
38/116
post-thumbnail

🖊️ 문제

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


🖊️ 풀이

처참한.. 패배 선언이다 .......

이거를 어떻게 해야하나..
개수를 세는걸 못해씀..
ㅜㅜ

다 세면서 풀이과정을 도식화하려 했으나 쉽지 않았다..

해시가 아닌 (알고리즘적 문제가 아닌) 풀이 방법이 생각이 안났으므로,,
이미 1시간 이상 고민 했으므로,,
구글링..

근데 세상에 이렇게 쉽게 풀다니

1가지 이상의 의상은 무조건 입고 있고 다 단독으로 경우의 수를 세어주니까

만약에
의상종류1 - 의상개수 3
의상종류2 - 의상개수 2
의상종류3 - 의상개수 1
이라면

의상종류1을 입는 경우의 수 : 0 / 1 / 2 / 3 (0 : 안입음, 나머지 : index)
이런식..
그래서 의상개수 + 1개의 경우의 수를 가지고
얘네를 모조리 곱해준 뒤
아무것도 안입고 있는 경우는 없으니까
0 0 0 인 경우를 제외하기 위해 1을 빼주면 된다.

에휴..
하나 배웠다고 생각하자!

#include <string>
#include <vector>
#include <unordered_map>  
#include <iostream>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    unordered_map<string, int> um;
    
    for(auto& cl :  clothes) {
        um[cl[1]]++;
    }
    
    for(auto iter = um.begin() ; iter != um.end() ; iter++) {
        answer *=(iter->second+1);
    }
    answer -= 1;
    
    return answer;
}

0개의 댓글