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

hhkim·2023년 7월 13일
0

Algorithm - JavaScript

목록 보기
64/188
post-thumbnail

풀이 과정

  1. 두 배열 정렬: sort()
  2. 참가자 배열에 대해 반복하면서 완주자 배열과 일치하지 않는 요소가 있으면 리턴: for
    이때 마지막 인덱스까지 도달했으면 그거 리턴

  1. 맵 생성
  2. 참가자 배열에 대해 반복하면서 key를 이름으로, value를 이름의 수로 등록: set()
    이때 동명이인이 있는 경우는 +1: get()
  3. 완주자 배열에 대해 반복하면서 key에 대해 -1: set(), get()
  4. 맵을 배열로 변환 후 수가 0보다 크면 이름만 남기기: map()
  5. 4번 배열을 문자열로 변환: join()

코드

function solution(participant, completion) {
  participant.sort();
  completion.sort();
  let i = 0;
  for (; i < participant.length; ++i) {
    if (i === participant.length - 1 || participant[i] !== completion[i]) {
      break;
    }
  }
  return participant[i];
}
function solution(participant, completion) {
  const map = new Map();
  participant.forEach((e) => map.set(e, (map.get(e) || 0) + 1));
  completion.forEach((e) => map.set(e, map.get(e) - 1));
  return [...map].map((arr) => (arr[1] > 0 ? arr[0] : '')).join('');
}

🦾

자꾸 js 함수들 이용해서 편하게 풀 생각만 나서 시간복잡도 때문에 효율성 테스트 통과 못하고 뒤늦게 깨닫고 고치고 반복중

맵을 써서 풀 수도 있다고 해서 해봤는데 훨씬 빨랐다. (어떤 케이스에서는 2배나!)
이렇게 생각하는 방식도 계속 공부하면서 익숙해져야겠다.

0개의 댓글