느려도 한걸음씩

문제 5 - 완주하지 못한 선수(해시) 본문

알고리즘/코테대비 100문제

문제 5 - 완주하지 못한 선수(해시)

hoj0806 2025. 2. 4. 14:20

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

 

 

내 코드

function makeHashtable(arr) {
    const obj = {}

    for(const p of arr) {
        if(p in obj) {
            obj[p]+=1
        } else {
           obj[p] = 1
        }
    }
   return obj
}

function solution(participant,completion) {
    let hashtable = makeHashtable(participant)

    for(const p of completion) {
       let num = hashtable[p]
 
       hashtable[p]-=1
        if(hashtable[p] === 0) {
            delete hashtable[p]
        }
    }
    return Object.keys(hashtable)[0]
    
}

 

 

풀이

초기에 participant 배열을 받아 오브젝트를 이용해 해시 테이블을 생성한다 키는 참가자 이름 값은 해당 이름이 존재한다는 뜻에서 1로 설정해준다 이때 동명이인이 존재할수 있기 때문에 이미 해당 키가 해시테이블에 존재하면 값에 +1을 해준다

 

solution 함수에서 해시테이블을 생성한뒤 completion 배열을 순회하며 해시테이블의 값에 -1을 해준다 이때 값이 0이 되면 해당 키를 삭제한다 배열을 모두 순회한다면 해시테이블에 키와 값 한쌍만 남을 것이므로

 

오브젝트키값을 배열로 변환시켜 첫번째 요소 반환

'알고리즘 > 코테대비 100문제' 카테고리의 다른 글

문제 7 - 폰켓몬  (0) 2025.02.05
문제 6 - 할인 행사(해시)  (1) 2025.02.04
문제 4 - 모의고사(배열)  (0) 2025.01.29
문제 3- 두 개 뽑아서 더하기  (1) 2025.01.29
문제 2 - 배열 제어하기  (0) 2025.01.29