
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[i]=0;
completion[j]=0;
}
}
}
const answer = participant.filter(index => index !== 0).join();
return answer;
}
처음 나의 풀이는 하나씩 값을 잡아가며 비교하고 일치하는 값은 양쪽 다 0으로 바꾸어 중복을 피하고 후에 모든 배열을 돌았을 때 0을 필터링하여 값을 도출하는 것이었다. 방법은 무식하게 설계하여 당연히 정확도는 좋았지만 효율성에서는 극악이었다. 그래서 더 코드를 간결하거나 배열을 전부 돌지 않고도 할 수 있는 방법을 찾아야만 했다.

첫번째 제출에서 너무 무식한 방법을 사용했어서 두번째는 최대한 간결하게 메소드를 적극 이용하며 배열을 도는 비중을 줄이려고 했다. 하지만 이 방법으로는 한 배열만 돌면 끝났지만 중복을 잡지는 못하였다.


이전 제출들로 인해 배열을 최소 하나만 돌도록 그리고 중복을 잡을 수 있도록 방법을 찾았다. 문자열들로 이루어져 정렬 메소드를 사용하여 각 배열에 이름 별로 같은 위치를 하게 만들고 비교하며 일치 하지 않으면 참가자 배열의 값을 answer에 할당하여 return 하였다.
for문을 너무 무작정 써대는 느낌이 있고 여전히 메소드 사용이 서툰 느낌이다. 배열을 도는 map메소드를 사용하여 for문의 남용을 줄이고 더 간결하고 빠른 코드를 만들 수 있도록 해야겠다.
첫번째 제출에서 가뿐하게 통과할줄 알고 방심했던 나에게 효율성 문제는 크게 다가왔다. 정확도는 무식한 구조로도 충분히 할 수 있기에 효율성 부분으로 고민을 하며 풀어야겠다.