해시 맵 문제풀이 (프로그래머스: 완주하지 못한 선수 )
https://school.programmers.co.kr/learn/courses/30/lessons/42576
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의
function solution(participant, completion) {
var answer = "";
let map = new Map();
// 완주자를 반복문을 이용해서 key,value 형태로 그대로 저장
for (let i = 0; i < completion.length; i++) {
map.set(completion[i], completion[i]);
}
// 참여자를 이용해서 key를 찾아 undefined가 나오면 , 완주하지 못한 사람으로 결과 도출하기
for (let i = 0; i < participant.length; i++) {
if (!map.get(participant[i])) {
answer = participant[i];
break;
} else {
}
}
console.log("answer", answer);
return answer;
}
=> 문제 발생
function solution2(participant, completion) {
var answer = "";
let map = new Map();
for (let i = 0; i < completion.length; i++) {
let name = completion[i];
// 해당 이름으로 키값이 이미 존재하면 +1
if (map.has(name)) {
map.set(name, map.get(name) + 1);
}
// 해당 키값이 처음 나왔으면 1로 저장
else {
map.set(name, 1);
}
}
for (let i = 0; i < participant.length; i++) {
let name = participant[i];
// map에 해당 이름이 없거나, 개수가 0이면 완주 못한 사람
if (!map.has(name) || map.get(name) === 0) {
answer = name;
break;
} else {
map.set(name, map.get(name) - 1);
}
}
return answer;
}
느낀점