Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

네박자대로

[프로그래머스 > 고득점kit 해시] 위장 (C++) 본문

알고리즘

[프로그래머스 > 고득점kit 해시] 위장 (C++)

ysyang 2021. 2. 4. 23:29

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

 

 

이전 문제는 굳이 해시로 풀지 않아도 해결 가능했다면

위장 문제 부터는 해시로 풀어야 효율적으로 해결할 수 있었다.

 

 

하지만 나는  unordered_map  STL을 써본 적도 없었고, 해시맵에 대한 이해가 부족했기 때문에

다른 분들의 블로그 글과 정리를 참고해서 이 문제를 해결할 수 있었다 ㅠㅠ

 

 

 

 

 

 

우선 참고한 블로그 링크를 걸어두겠다

 

 

<1. unordered_map 사용법>

kamang-it.tistory.com/entry/mapunorderedmapC%EC%97%90%EC%84%9C-map%EB%94%95%EC%85%94%EB%84%88%EB%A6%ACdictionary-%EC%97%B0%EA%B4%80%EB%B0%B0%EC%97%B4associate-array%ED%95%B4%EC%8B%9C%EB%A7%B5hash-map%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0map%EA%B3%BC-unorderedmap-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

[c++][STL][map][unordered_map]C++에서 map(딕셔너리:dictionary, 연관배열:associate array,해시맵:hash map)사용하

맵은 다른용어로 연관배열(php, javascript), 딕셔너리(python), 해시맵(java), js object(javascript)등으로 다양하게 불리운다. 사실 해시맵은 맵의 일종이다. 이는 아래에서 설명하도록 하겠다. 맵에 대해서

kamang-it.tistory.com

 

 

 

<2. 프로그래머스 위장 문제 해결 알고리즘>

shjz.tistory.com/102

 

[C++, Hash] 프로그래머스 위장 문제 풀이

문제링크 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 | 프로그래머스 programmers.co.kr 풀이 기본적인 접근은 맞았는데 응용력이 부족했던 문제이다. 조합을 구성할 때..

shjz.tistory.com

 

 

 

 

 

두 블로그가 너무 잘 정리되어 있기에 추가적인 코드 설명은 생략하겠다.

 

 

 

 

 

 

 

 

 

 

제출한 코드는 아래와 같다.

 

#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으로 초기화했다.

디버깅 해보고 글 마저 추가하도록 하자!

 

 

 

 

Comments