• 해시 알고리즘 문제 : 프로그래머스 LEVEL 2(위장) image - 사용 언어 : C++ - 해결 날짜 : 2021-02-02

    **- 해결 방법** :
    
        보자마자 map을 사용하면 되겠다는 생각이 들었다.
    
        map에 이미 존재하는 의상이라면 그 key의 value 값을 증가시켜주고,
        존재하지 않는다면 kinds vector에 추가 후 그 key의 값을 1로 초기화하였다.
    
        그 후 맵에 저장된 값들을 돌며 알고리즘에 따라 신규 값들을 추가해 주었다.
        알고리즘 : 이전 값 + (새 의상의 개수(1개짜리) + 새 의상의 개수 * 이전 값)
    
    - 코드
    
    ```
    #include <string>
    #include <vector>
    #include <map>
    
    using namespace std;
    
    int solution(vector<vector<string>> clothes) {
        map<string, int> m; //각 의상 별 개수를 저장하기 위한 map
        vector<string> kinds; //의상의 종류
        for (int i = 0; i < clothes.size(); i++) {
            if (m[clothes[i][1]] > 0) { //의상의 종류가 map에 존재하는 경우
                m[clothes[i][1]]++;
            }
            else { //존재하지 않는 신규
                kinds.push_back(clothes[i][1]);
                m[clothes[i][1]] = 1;
            }
        }
        int answer = 0;
    
        //알고리즘 : 이전 값 + (새 의상의 개수 + 새 의상의 개수 * 이전 값)
        //즉, 이전 값 + 한개짜리 + 이전 값과의 조합
        for (int i = 0; i < kinds.size(); i++) {
            answer = answer + (m[kinds[i]] + m[kinds[i]]*answer);
        }
        return answer;
    }
    ```