(프로그래머) 자바스크립트 해시 – 미완성 플레이어

프로그래머 고득점 KIT

문제 설명

많은 마라톤 선수들이 마라톤에 참가했습니다. 한 명의 주자를 제외한 모든 주자가 마라톤을 완주했습니다.
마라톤을 완주한 선수의 이름을 배열 선수에게 제공하고 마라톤을 완주한 선수의 이름을 배열 완주에 제공하는 경우,
완주하지 못한 선수의 이름을 반환하는 해결 함수를 작성하세요.

제한
– 마라톤 참가자 수는 1명에서 100,000명 사이입니다.
– 거래 기간은 참가자의 길이보다 하나 적습니다.
– 참가자의 이름은 알파벳 소문자 1자 이상 20자 이내로 구성되어야 합니다.
– 참가자 중 동명이인이 있을 수 있습니다.

I/O 예시

참가자 완성 돌려 주다
(“라이온”, “키키”, “에덴”) (“에덴”, “키키”) “사자”
(“마리나”, “조시파”, “니콜라”, “빈코”, “필리파”) (“조시파”, “필리파”, “마리나”, “니콜라”) “빈코”
(“미슬라브”, “스탄코”, “미슬라브”, “아나”) (“stanko”, “ana”, “mislav”) “미슬라브”

I/O 예시 설명

예 1
“leo”는 경쟁자 목록에는 있지만 완주자 목록에는 없기 때문에 완주할 수 없습니다.

예 #2
“vinko”는 경쟁자 목록에는 있지만 완주자 목록에는 없으므로 완주하지 못했습니다.

예 #3
경쟁자 목록에는 “Mislav”가 두 개 있지만 완주 목록에는 한 개만 있으므로 하나는 완료하지 못했습니다.

솔루션(정답)

function solution(participant, completion) {
    var answer="";
    let m = new Map();
    for(let i in completion) {
        if(m.has(completion(i)))
            m.set(completion(i), m.get(completion(i))+1);
        else
            m.set(completion(i), 1);
    }
    for(let i in participant) {
        if(!m.has(participant(i)) || m.get(participant(i)) === 0)
            answer = participant(i);
        else
            m.set(participant(i), m.get(participant(i))-1);
    }
    return answer;
}

이는 해시 문제이므로 맵을 사용하여 키-값 쌍을 사용했습니다.

핵심은 완성 길이가 참가자보다 1 짧다는 것,

그래서 완성도를 먼저 확인하고 지도에 입력했습니다.

그리고 참가자를 조사하여,

이전 완료를 통해 맵에 입장하지 않은 경우 해당 참가자를 답변으로 입력합니다.

let m = new Map();

// map에 key와 value 값을 추가
m.set(key, value);

// key의 value값
m.get(key);

// map에 key 값이 존재하는지 반환 (boolean)
m.has(key);

지도로 해결하는 데 주로 사용되는 지침입니다.

결과