프로그래머스 완주하지 못한 선수

lynn·2022년 7월 2일
0

알고리즘

목록 보기
2/3

입출력 예

예시를 보고 생각했던 로직

카테고리에 해시로 되어있길래 질문하기 창에서 찾다가 해시 적용+구현하기 좋은 로직을 발견해서 내가 생각했던 과정을 그대로 옮겨왔다.

동명이인이 있는 3번째 입출력 예시이다.

  1. object로 초기화
    {mislav:0,stanko:0,ana:0}
  1. participant 배열을 돌면서 object key가 있을 때 value 하나씩 증가
    {mislav:2,stanko:1,ana:1}
  1. completion 배열을 돌면서 이름이 있을때 value를 하나씩 감소
    {mislav:1,ana:0,stanko:0}
  1. 최종적으로 0이 아닌 key값을 반환 -> "mislav"

최종적으로 구현한 코드

function solution(participant, completion) {
  let hash = {};

  // object 타입으로 hash(해시테이블) 초기화
  for (let el of participant) hash[el] = 0;

  // participant 요소가 hash의 key일때 value 하나씩 증가
  for (let el of participant) if (hash[el] !== undefined) hash[el]++;

  // completion 배열을 돌면서 요소가 hash의 key에 해당되면 value 하나씩 감소
  for (let el of completion) if (hash[el] !== undefined) hash[el]--;

  // value가 0이 아닌 key값을 반환
  for (let key in hash) {
    if (hash[key] !== 0) return key;
  }
}
profile
개발 공부한 걸 올립니다

0개의 댓글