개발 블로그

[프로그래머스/Javascript/Hash] 완주하지 못한 선수 본문

IT/Programmers

[프로그래머스/Javascript/Hash] 완주하지 못한 선수

파티에 2021. 4. 9. 23:47

1. 문제 설명(출처: programmers.co.kr/learn/courses/30/lessons/42576)

2. 문제 풀이
1) 문제에서 참여자 명단에는 있지만, 완주자 명단에는 없는 사람을 찾으라고 했다. 단, 동명이인이 있을 수 있다고 했다. 이는 hash(map)를 사용해 (이름, 동명이인의 수)를 만들고, 완주자 명단에 있는 이름의 동명이인의 수를 감소시키면 마지막 남은 사람을 찾을 수 있다.
2) participants를 각각 돌아가면서 아래 명령을 수행한다.
  2-1) map에 해당 참가자의 이름이 있는지 확인한다.
       2-1-T1) 해당 참가자의 동명이인 수 + 1을 한다.
       2-1-F1) 해당 참가자를 (이름, 1) 형태로 map에 저장한다.
3) completions를 각각 돌아가면서 아래 명령을 수행한다.
  3-1) map에 해당 완주자의 이름이 있는지 확인한다.
     3-1-T1) 해당 참가자의 동명이인 수 - 1을 한다.
4) map에 있는 참가자들의 이름을 돌아가면서 value가 1인 사람의 이름을 찾아서 반환한다.

3. 결과 코드

function solution(participants, completions) {
  var hmap = new Map()
  for(let participant of participants){
    if(hmap.has(participant)){
      hmap.set(participant, hmap.get(participant)+1)
    }else{
      hmap.set(participant, 1)
    }
  }

  for(let completion of completions){
    if(hmap.has(completion)){
      hmap.set(completion, hmap.get(completion)-1)
    }
  }
  
  return [...hmap.entries()]
      .filter(({ 1 : v }) => v === 1)
      .map(([k]) => k)[0];
}