updated 11.07.2022
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
길이가 더 짧은 completion을 반복문 돌리면서 participant와 비교하면서 중복된 것을 splice
로 제거해나가기. 완주하지 못한 선수의 이름을 return할 수 있다.
1. 처음에 썼던 코드
function solution(participant, completion) {
for(let i = 0; i < participant.length; i++){
for(let j = 0; j < completion.length; j++){
if(participant[i] == completion[j])
participant.splice([i],1);
}
}
return participant;
}
2.두번째 쓴 코드
function solution(participant, completion) {
var sum = participant.concat(completion);
for(let i = 0; i < sum.length; i++){
for(let j = 1; j <sum.length; j++)
if(sum.indexOf(i) == sum.indexOf(j)){
sum = sum.slice([i],1);
}
}
return sum.toString();
}
concat
메서드로 두 배열을 합친 후 같은 문자가 있는지 돌아가면서 찾는 방법.
아니 두번째 테스트 케이스 왜 안되는지 정말 모르겠어서 한참을 들여다본 코드😢
function solution(participant, completion) {
participant.sort();
completion.sort();
for(var i=0;i<participant.length;i++){
if(participant[i] !== completion[i]){
return participant[i];
}
}
}
너무 어이없이 간단하다😣
function solution(participant, completion) {
let myMap = new Map();
for (let x of participant) {
myMap.set(x, (myMap.get(x) || 0) + 1);
}
for (let x of completion) {
myMap.set(x, (myMap.get(x) || 0) - 1);
}
for (let [k, v] of myMap) {
if (v === 1) {
return k;
}
}
}
알고리즘 수업시간에 배운 해싱 방법을 사용한 풀이
효율성에서 훨씬 개선되었다.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42576
참고한 사이트 :
1. https://im-developer.tistory.com/103
2. https://all-dev-kang.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B0%B0%EC%97%B4-%EB%B9%84%EA%B5%90%ED%95%98%EB%8A%94-3%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95-%ED%98%95%EB%8B%98%EC%9D%98-%EC%86%94%EB%A3%A8%EC%85%98
3. https://cattaku.tistory.com/34