1주 1알고리즘 문제 풀기👆
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.참가자 중에는 동명이인이 있을 수 있습니다.
(동명이인 조건 때문에 단순한 배열 에서 includes통해서 답을 얻을 수 있는 문제가 아니었다)
participant completion return
[leo, kiki, eden] [eden, kiki] "leo"
answer
변수를 만든다. for문
을 돌면서 indexOf
method를 통해 완주한선수의 이름이 있는 participant의 index
를 구한 뒤 splice
method를 사용해서 해당 인덱스 값을 지워나가게끔 했다. participant[0]
으로 가져왔다.function solution(participant, completion) {
let answer = "";
for (let i = 0; i < completion.length; i++) {
let repetitiveIndex = participant.indexOf(completion[i]);
participant.splice(repetitiveIndex, 1);
}
answer = participant[0];
return answer;
}
sort
를 통해 알파벳 순서로 정렬한다.function solution(participant, completion) {
const sortedParticipant = participant.sort();
const sortedCompletion = completion.sort();
for (let i = 0; i < participant.length; i++) {
if (sortedParticipant[i] !== sortedCompletion[i]) {
return sortedParticipant[i];
}
}
}
풀이1 대로 하면 동명이인이 있든 아니든 인덱스를 찾아 제거하고 다 제거되 고 남은 값을 리턴하는 방법이어서 깔끔하다고 생각했는데, for 문안에서 splice 나 indexOf 를 같이 사용하는것에 효율성에 떨어져서 통과되지 못한다는걸 알았다..
이중 for문도 써봤지만 결국 splice와 함께 썼을때 효율성에서 패스하지 못했고, 결국 스터디원의 힌트를 받아 풀이2 코드를 작성할 수 있었다ㅜㅜ 계속푸는것 만이 답이다....