본문 바로가기
ALGORITHM/프로그래머스 With JS

[프로그래머스] 완주하지 못한 선수 / Javascript

by LAY CODER 2021. 4. 27.

문제

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 


 

TRY 1 (효율성 실패)

let participant = ['mislav', 'stanko', 'mislav', 'ana']; // 참여 선수
let completion = ['stanko', 'ana', 'mislav']; // 완주한 선수

function solution(participant, completion) {
    for (let i = 0; i < completion.length; i++) {
        if (participant.includes(completion[i])) {
            participant.splice(participant.indexOf(completion[i]), 1);
        }
    }

    return participant.join('');
}

console.log(solution(participant, completion));

 

완주자 수 만큼 for문을 돌려 해당 완주자를 참가자가 포함하고 있는지 Array.includes() 를 이용하여 확인하고

 

참가자 배열에서 해당 완주자를 Array.indexOf()Array.splice()를 이용해서 제거해 주었다.

 

function을 남용해서 인지 효율성에 좋지 않아 재시도 하였다.

 


 

TRY 2 

let participant = ['mislav', 'stanko', 'mislav', 'ana']; // 참여 선수
let completion = ['stanko', 'ana', 'mislav']; // 완주한 선수

function solution(participant, completion) {
    participant.sort();
    completion.sort();

    for (let i = 0; i < participant.length; i++) {
        if (participant[i] !== completion[i]) {
            return participant[i];
        }
    }
}

console.log(solution(participant, completion));

 

완주자가 참여자 보다 한 명 적은 점을 이용하여

 

참여자와 완주자 두 배열을 Array.sort()를 이용하여 똑같이 정렬시키고 같은 인덱스의 값이 다를 경우

 

반환하는 식으로 풀이하니 통과할 수 있었다.

 


 

BEST

let participant = ['mislav', 'stanko', 'mislav', 'ana']; // 참여 선수
let completion = ['stanko', 'ana', 'mislav']; // 완주한 선수

function solution(participant, completion) {
    participant.sort();
    completion.sort();

    return participant.find((el, index) => el !== completion[index]);
}

console.log(solution(participant, completion));

 

다른 사람들의 풀이를 참고하여 for문을 사용하지 않고 Array.find() 를 통해

 

두 배열의 같은 인덱스의 다른 값을 반환하는 방식으로 코드를 정리하였다.

 

댓글