본문 바로가기
Developer/C, C++

[C++] 프로그래머스 - 위장 (해시)

by Doony 2021. 12. 31.

이번 포스팅에서는 프로그래머스의 위장 (해시) 문제를 다뤄보겠습니다. 해시 부분이 사실 직관적이고 다소 쉬운편인 것 같아서 C++ 연습하는 데 활용하고 있는데요. 그럼에도 불구하고 사소한 문법 하나하나가 생소하다보니 시간이 많이 걸리고 있네요.


문제 정의

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. (이하 생략)


접근방법

  • 해시로 옷의 종류에 따른 수를 저장합니다. 옷의 종류는 key, 수는 value가 되겠습니다.
  • 이 이후는 사실 수학적인 계산 정도인데요. 모든 아이템의 옷의 수, 즉 value에 +1를 해서 곱셈을 연산하면, 옷을 입을 수 있는 경우의 수가 나옵니다. +1을 하는 이유는 해당 옷 종류를 입지 않았을 때를 포함시켜주는 게 목적이고요. 다만, 적어도 하나의 옷은 입어야 한다는 조건이 있었으므로, 마지막 결과물에 -1을 해주면 됩니다.

전체 코드

코드는 직관적이고 간결한 편이라 부가 설명은 하지 않겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <iostream>
 
using namespace std;
 
int solution(vector<vector<string>> clothes) {
    int answer = 0;
    int temp = 1;
    
    // calculate category
    unordered_map<string,int> cat;
    for (int i=0; i < clothes.size(); i++) {
        cat[clothes[i][1]]++;
    }
    
 
    for (auto elem : cat) {
        temp *= (elem.second+1);
 
    }
 
    answer += temp;
    
    
    // exclude nothing
    answer -= 1
    
    
    
    return answer;
}
cs

댓글