프린세스 다이어리

[프로그래머스] 자바스크립트 완주하지 못한 선수 문제 - 해시 본문

자료구조, 알고리즘

[프로그래머스] 자바스크립트 완주하지 못한 선수 문제 - 해시

개발공주 2021. 11. 15. 18:38
728x90

> 문제 바로가기

 

 

1. 접근 방법

 

(0) 동명이인이 있을 수 있다는 점에서 해시 테이블로 푸는 방법을 생각했다.

 

(1) participant를 map에 저장하면서, key는 참가자 이름, value는 동명이인이 이미 있으면 +1, 없으면 그냥 1로 넣어준다.

    for (let person of participant){
        if(!map.get(person)){
            map.set(person, 1);
        }else{
            map.set(person, map.get(person)+1);
        }
    }

 

(2) completion을 돌면서 한 명씩 map에 이름에 해당하는 값이 1이면 엘리먼트를 삭제해 주고, 2 이상이면 1을 뺀다.

    for(let person of completion){
        if(map.get(person) >= 2){
            map.set(person, map.get(person) - 1);
        } else {
            map.delete(person);
        }
    }

 

(3) 맨 마지막 남은 원소를 리턴해준다.

    for(let person of participant){
        if(map.get(person) && map.get(person) >= 1 ){
            answer = person;
        }
    }

 

2. 해답 코드

 

function solution(participant, completion) {
    let answer = ''
	const map = new Map();

    for (let person of participant){
        if(!map.get(person)){
            map.set(person, 1);
        }else{
            map.set(person, map.get(person)+1);
        }
    }

    for(let person of completion){
        if(map.get(person) >= 2){
            map.set(person, map.get(person) - 1);
        } else {
            map.delete(person);
        }
    }
    
    for(let person of participant){
        if(map.get(person) && map.get(person) >= 1 ){
            answer = person;
        }
    }
    
    return answer
}

 

풀이 후기: 기껏 정석적으로 자바스크립트 해시 테이블 만드는 방법을 공부했는데 결국 new Map() 생성자 함수로 해결하면 쉽게 끝나서 약간 허무쓰 했다.

 

728x90
Comments