본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
코딩/알고리즘 정답 or 풀이

[해시] 프로그래머스 -완주하지못한선수 c++

by 금의야행 2021. 12. 30.

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42576?language=cpp

 

 

간단 회고:

  O X
내가 직접 풀었나?  
다른 사람 풀이를
참고 하였나?
 
어려웠나?  
푸는데 오래걸렸나?  

✅✔

출처:

https://mungto.tistory.com/193

 

완전히 남의 풀이를 참고했다. 해시 맵이라는 자료구조를 사용할 생각조차 못했다. 해시 맵의 사용법에 대해 처음 익힐 수 있어서 좋았다.

 

여기서 두가지 중요 c++ 테크닉이 나오는데

 

1. 범위 기반 for문 (쉽게 말해 배열안의 원소를 기준으로 순회)

int arr[3] = {23, 34, 50}
for (int element : arr) {
	cout << element << endl;
}

23
34
50

https://openmynotepad.tistory.com/15

 

해당 링크에 범위 기반 순회 방법에 대해 잘 기술되어있다.

 

2. auto 

변수를 초기화할 때 사용하는 값을 기준으로 적절한 타입을 추론하도록 하면 편하지 않을까?


출처: https://boycoding.tistory.com/184 [소년코딩]

 

 

풀이:

 

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

using namespace std;


string solution(vector<string> participant, vector<string> completion) {
    
    string answer = "";
    
    //해쉬맵 초기화
    unordered_map<string, int> hash;
    
   	// 이름을 key로 value에는 참여횟수
    for (string name : participant) {
        hash[name]++;
    }
    
    // 완주자를 이름을 key로 찾아 -- 
    for (string name : completion) {
        hash[name]--;
    }
    
    // hash map을 순회하며 두번째 값(참여횟수)이 0보다 클 경우, 
    // 첫번째 key(이름)을 답에 넣는다.
    for (auto pair : hash) {
        if (pair.second > 0) {
            answer = pair.first;
            break;
        }
    }
    
    return answer;
}

 

 

 

 

 

 

 

 

댓글