내가 한 풀이 (2중 for문 사용으로 효율성 테스트 0점)
function solution(participant, completion) {
var answer = '';
//completion 의 인자 1개씩을 par과 비교할때
//있으면 par에서 filtering 한다
for(let x of completion) {
let idx = participant.indexOf(x);
participant.splice(idx,1);
}
return participant[0]; //
}
participant(참가자) 배열과 completion(완주자) 배열의 비교 해서 남는 배열 요소를 출력하면 될 것 같다. 하지만 참여한 선수의 수가 100,000명 이하로 주어진 것을 보아 시간 복잡도를 고려해야 할 것 같다. 2중으로 for 문을 돌리면 시간초과에 걸린다.
participant(참가자) 배열과 completion(완주자) 배열 모두 sort()를 이용해서 정렬시키자. 그리고 인덱스 0부터 두 배열을 비교하면 for문 한 번으로 문제를 해결할 수 있다. participant(참가자) 배열과 completion(완주자) 배열을 0번 부터 비교하다보면 participant(참가자) 배열에 비완주자(정답)가 나올 경우 두 배열 비교 연산은 불일치가 나올 것이고 그 때 participant(참가자) 배열의 요소를 출력하면 된다.
출처 : https://wooder2050.medium.com/알고리즘-완주하지-못한-선수-javascript-2ecb52443e8d
function solution(participant, completion) {
participant.sort(); //참가자 배열 정렬
completion.sort(); //완주자 배열 정렬
for(var i=0;i<participant.length;i++){
if(participant[i] !== completion[i]){
//인덱스 0부터 순차적으로 두 배열 비교
return participant[i];
//비완주자가 참가자 배열에 나올 경우 출력
}
}
}
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.