프로그래머 고득점 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);
지도로 해결하는 데 주로 사용되는 지침입니다.
결과