어흥

[해커랭크] Hash Tables: Ransom Note (C++) 본문

알고리즘/HackerRank

[해커랭크] Hash Tables: Ransom Note (C++)

라이언납시오 2021. 2. 16. 10:11
728x90
반응형

문제 링크: www.hackerrank.com/challenges/ctci-ransom-note/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=dictionaries-hashmaps

 

Hash Tables: Ransom Note | HackerRank

Given two sets of dictionaries, tell if one of them is a subset of the other.

www.hackerrank.com

1. 주의할 점

- Map에 대해서 알고있어야 한다

- Magazine에 A 단어가 B개 있을 때, Note에 A 단어가 B개보다 많다면 No 출력

 

2. 구현

- Magazine에 있는 모든 단어를 Map에 <단어, 단어 개수> 형태로 저장한다

- Note에 있는 모든 단어를 Map에서 검색한다. 찾고자 하는 단어가 Magazine에 없거나 남아있는 개수가 없다면 No를 출력하고 이외의 경우에는 Yes를 출력한다

void checkMagazine(vector<string> magazine, vector<string> note) {
    map<string, int> m;
    string s;
    for(int i=0;i<magazine.size();i++){
        s = magazine[i];
        if(m.find(s)!=m.end()) m[s]++;
        else m[s]=1;
    }
    bool avail = true;
    for(int i=0;i<note.size();i++){
        s = note[i];
        if(m.find(s)==m.end() || m[s]==0){
            avail=false;
            break;
        }
        else
            m[s]--;        
    }
    avail==true? cout<<"Yes" : cout<<"No";
}
728x90
반응형
Comments