네박자대로
[프로그래머스 > 고득점kit 해시] 위장 (C++) 본문
programmers.co.kr/learn/courses/30/lessons/42578
이전 문제는 굳이 해시로 풀지 않아도 해결 가능했다면
위장 문제 부터는 해시로 풀어야 효율적으로 해결할 수 있었다.
하지만 나는 unordered_map STL을 써본 적도 없었고, 해시맵에 대한 이해가 부족했기 때문에
다른 분들의 블로그 글과 정리를 참고해서 이 문제를 해결할 수 있었다 ㅠㅠ
우선 참고한 블로그 링크를 걸어두겠다
<1. unordered_map 사용법>
<2. 프로그래머스 위장 문제 해결 알고리즘>
두 블로그가 너무 잘 정리되어 있기에 추가적인 코드 설명은 생략하겠다.
제출한 코드는 아래와 같다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
unordered_map <string,int> hash;
for(vector<string> atom : clothes)
{
hash[atom[1]]=0;
}
for(vector<string> atom : clothes)
{
hash[atom[1]]++;
}
for(pair<string,int> atom : hash)
{
answer *= (atom.second+1);
}
return answer-1;
}
다만 헷갈렸던 부분은, 내부 키값을 초기화하지 않은 해시맵에
hash[atom[1]]++;
코드를 바로 입력해도 괜찮은지 였다.
null값에 대해 0으로 초기화되어 ++연산을 하면 1이 되는 것이 확실한지
아니면 반드시 0으로 초기화해주고 써야 쓰레기 값이 없는 건지..
이 부분은 VS로 디버깅 하면서 확인해봐야 할 것 같다.
인터넷 검색 결과 존재하지 않는 값에 대해서 0으로 인식한다고 하고
링크를 걸어둔 블로그나 혹은 다른 정답 코드들을 보면 굳이 0으로 초기화 한 후 ++연산을 수행하지는 않았다.
하지만 나는 정확히 0이라는 확신이 없어 우선 0으로 초기화했다.
디버깅 해보고 글 마저 추가하도록 하자!
'알고리즘' 카테고리의 다른 글
[프로그래머스 > 고득점kit 해시] 베스트 앨범 (C++) (0) | 2021.03.04 |
---|---|
[프로그래머스 > 고득점kit 해시] 전화번호 목록 (C++) (0) | 2021.01.21 |
[프로그래머스 > 고득점kit 해시] 완주하지 못한 선수 (C++) (0) | 2021.01.21 |
[백준 15954번] 인형들 (C++) (0) | 2021.01.19 |
[백준 15953번] 상금 헌터 (C++) (0) | 2021.01.16 |
Comments