반응형

 

 

 

 

풀이코드

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

using namespace std;

#define CLOTH_KIND 1

int GetAnswer(const vector<vector<string>>&);

int solution(vector<vector<string>> clothes) {
    int answer = GetAnswer(clothes);
    return answer;
}

int GetAnswer(const vector<vector<string>>& clothes)
{
    int returnValue = 1;
    unordered_map<string, int> map;
    for(int i = 0; i < clothes.size(); i++)
    {
        auto iter = map.find(clothes[i][CLOTH_KIND]);
        if(iter == map.end())
        {
            map.insert(make_pair(clothes[i][CLOTH_KIND], 1));
        }
        else
        {
            iter->second++;
        }
    }

    for(auto iter = map.begin(); iter != map.end(); iter++)
    {
        returnValue *= iter->second + 1;
    }

    return returnValue - 1;
}
  • map을 만들어 옷 종류별로 나눈 뒤, 경우의 수를 계산하여 반환한다.

 

 

 

기타

- 처음에는 map<string, vector<string>>으로 선언해서 접근했으나, 하다보니 수학으로 해결해야 할 것 같아서 map<string, int>로 변경했다.

- 코드 자체는 작성하기 쉬웠으나 경우의 수에서 많이 헤맸다.

- 경우의 수와 같은 경우, 각 옷의 종류마다 입지 않는다는 경우를 하나더 추가해서 모든 경우의 수를 계산하게 되면 마지막의 경우는 모든 옷을 입지 않는다는 수가 나오게 되는데, 지문에서 무조건 1개 이상 입도록 되어있으니 해당 경우의 수를 제외해서 반환하면 된다.

- 다른 사람 풀이를 보니 굳이 find로 키를 찾을 필요없이 operator[]로 바로 접근해도 됐었다.

- operator[]의 경우, 맵 안에서 키를 탐색하고 저장된 값의 참조를 반환하며, 키가 없을 경우 기본 초기화를 사용하여 해당 키에 새 요소를 만든 뒤 참조를 반환한다.

 

 

 

 

 

반응형

'Stack > Coding test' 카테고리의 다른 글

[C++ / Lv2] 기능개발  (0) 2022.02.15
[C++ / Lv3] 베스트 앨범  (0) 2022.02.10
[C++ / Lv2] 전화번호 목록  (0) 2022.02.05
[C++ / Lv1] 완주하지 못한 선수  (0) 2022.02.04
[C++ / Lv2] 문자열 압축  (0) 2022.02.02

+ Recent posts