@수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
를 map 을 이용해 풀어보려 한다
function solution(participant, completion) {
var answer = '';
let myMap = new Map();
completion.forEach((val,i)=>myMap.set(val,i))
for (let i = 0; i< participant.length; i++) {
if (myMap.has(participant[i])==false) return participant[i]
}
}
forEach 문을 통해 val, i 를 map 에 set 해주는 것으로 객체로 활용해 효율성을 올려보려고 했지만, 동명이인이 있을 경우에는 틀린 값이 나왔다
이는 자료구조 Map 의 경우 같은 key 을 저장하게 될 경우 나중에 받는 값으로 저장된다는 특징 때문이다
그래서 val, i 가 아닌 i , val 을 myMap 에 set 해주는 방법을 생각했다
그러면 value 값으로 key 를 찾아야 하는데 다시 배열로 돌려서 find 메서드를 사용하는 법을 생각해보았다
function getKey(map, value) {
return Array.from(map.keys()).find((key) => map.get(key) === value);
}
get key 함수를 사용해서 value 를 통해 key 를 찾을수는 있지만 데이터 측면에서 좋지 않을 것 같다는 생각이다
function getKey(map, value) {
return Array.from(map.keys()).find((key) => map.get(key) === value);
}
let participant = ["leo", "kiki", "eden", "leo"];
let completion = ["leo", "kiki", "eden"];
function solution(participant, completion) {
let answer = [];
let myMap = new Map();
participant.forEach((val, i) => myMap.set(i, val));
for (let i = 0; i < completion.length; i++) {
myMap.delete(getKey(myMap, completion[i]));
}
let num = myMap.entries();
console.log(num); // [Map Entries] {[3,'leo]}
console.log(...num); // [3,'leo']
}
solution(participant, completion);
여기서 마지막 부분에 myMap 에 하나만 남은 요소를 출력하는 것에 어려움을 겪었다
num 을 Map 요소에서 벗겨내기 위해 spread operator 를 사용하기로 했다
let num = [...myMap.entries()];
console.log(num[0][1]); // leo
이런 말도 안되는 방식으로 'leo'를 추출하긴 했는데 좋은 방법은 아닌 것 같다
거기에 효율성 테스트에서 모두 실패가 떴다
forEach 와 for 문을 많이 돌리는 것이 패착이었다
function solution(participant, completion) {
let participantSorted = participant.sort()
let completionSorted = completion.sort()
for (let i = 0; i< participant.length ; i++) {
if (participantSorted[i] !== completionSorted[i]) return participant[i]
}
}
결국 전체 등수를 구할 필요 없이 겹치지 않는 값 하나만 구하면 되기 때문에 sort 를 이용해 비교하는 방법으로 풀었다
자료구조 Map 에 대해 공부를 할 수는 있었지만 상황에 맞는 자료구조와 방법을 이용할 수 있도록 하자