[프로그래머스] 완주하지 못한 선수 (JS)

chooing·2022년 3월 9일
0

프로그래머스

목록 보기
1/4

전체코드

function solution(participant, completion) {
    let answer;
    
    const newMap = completion.reduce((acc, cur) => {
      acc.set(cur, acc.has(cur) ? acc.get(cur) + 1 : 1);
      return acc;
    }, new Map());

    for (const val of participant) 
      newMap.has(val)
      ? newMap.set(val, newMap.get(val) - 1)
       : (answer = val);
      if (newMap.get(val) < 0) answer = val;   

    }
    
    return answer;
}

문제풀이

1. reduce함수를 이용하여 완주한 선수들을 Map 형식으로 바꾼다.

    const newMap = completion.reduce((acc, cur) => {
      acc.set(cur, acc.has(cur) ? acc.get(cur) + 1 : 1);
      return acc;
    }, new Map());
  • key: 완주한 선수 이름 , value: 명수
  • 동명이인이 있다는 점을 유의해 조건문을 통해 해당 이름이 있다면 명수를 증가 시킨다.

2. for of 반복문을 사용하여 완주하지 못한 선수를 구한다.

    for (const val of participant) 
      newMap.has(val)
      ? newMap.set(val, newMap.get(val) - 1)
       : (answer = val);
      if (newMap.get(val) < 0) answer = val;   
  • 참가 선수 리스트를 반복하여 참가 선수가 완주한 선수 리스트에 있다면 1씩 감소 시킨다.
  • 완주하지 못한 선수에 대한 2가지 경우
!newMap.has(val)

-- 참가선수 이름이 완주한 선수 리스트에 없는 경우

newMap.get(val) < 0

-- 완주 선수(key)의 명수(value)가 음수인 경우 (동명이인이 완주 하지 못할 떄 적용된다.)

여담


처음엔 해시에 대해서 하나도 지식이 없던 상태라 반복문 썼다가 효율성 검사에서 무한로딩으로 쫓겨났다. 그 뒤로 해시 알고리즘에 대해서 찾아보고 키 값을 통해 값을 가져오는 것이 더 빠르게 가져올 수 있다는 걸 알았다. 키값으로 풀이하는 법 중 map 함수를 사용하였는데, 덜 익숙한 함수라 손에 익히기 위해 map으로 문제를 풀어보았다. 효율성 검사에서 조마조마 했지만 다행히 통과 되었다.😅

profile
멋찐 프론트엔드 개발자가 되기 위해 공부 중입니다

0개의 댓글

관련 채용 정보