[프로그래머스][c++] 위장 (map 사용) + 다른 사람 풀이
프로그래머스의 첫번째 챕터가 해시이나, 앞의 두 문제는 사실 해시로 풀지는 않았다. 그래서 해시맵 등의 공부를 따로 해야겠구나... 생각을 하던 차였는데 이번 문제에서 map을 사용하였다.
원래 처음에는 hash_map으로 사용하였으나, 사용법을 제대로 알지 못해 에러가 계속 나와 결국 map으로 변경하여 풀었다.
문제에서 주어진 clothes에서 실제로 사용하는 category만 사용한다. 조합의 수를 구하기 위해서는 각 카테고리의 값에 1을 더한 후 곱하고, 1을 빼주어 문제를 풀었다.
i번째의 clothes의 category가 category map에 존재하는지 탐색한다.
category.find(key)의 경우 해당하는 key값이 map에 존재하는지 확인하며, 없다면 end()를 반환한다.
따라서 있다면 해당 category의 value 값을 1 증가시킨다.
없다면 map에 category와 1을 집어넣는다.
마지막으로 category map을 순회하며 answer을 구한다.
하나도 입지 않은 경우는 없으므로 1을 빼준다.
answer의 초기값이 0으로 설정되어 case 1의 경우 -1을 리턴했기에 answer의 값을 1로 변경하였다.
이번 문제는 효율성이 없어서 좋았다.
다른 사람들을 보니 나처럼 map을 사용하거나, unordered_map을 사용하였다.
특히 차이가 나는 부분은 map에 insert하고자 할 때, value의 값을 update하는 과정이 나보다 훨씬 깔끔하였다.
12~18줄의 과정을 두 줄만에 끝냈다.
unordered_map, map 둘 다 중복되지 않은 key값을 갖기에 나눌 필요가 없다. 또, insert나 value update를 꼭 map.insert를 하지 않고도 업데이트 할 수 있다는 점을 배웠다.
git: https://github.com/sojlee/programers_algorithm/blob/master/c%2B%2B/hash_3.cpp