문제

첫번째 제출

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문의 남용을 줄이고 더 간결하고 빠른 코드를 만들 수 있도록 해야겠다.

첫번째 제출에서 가뿐하게 통과할줄 알고 방심했던 나에게 효율성 문제는 크게 다가왔다. 정확도는 무식한 구조로도 충분히 할 수 있기에 효율성 부분으로 고민을 하며 풀어야겠다.

profile
https://github.com/WonseoYang

0개의 댓글