본문 바로가기

💻 개발자/🖥 알고리즘 문제

[프로그래머스] Level 1. 완주하지 못한 선수 (JS)

반응형

문제 설명

수 많은 마라톤 선수들이 마라톤에 참여하였다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성하라.

 

입출력 예시

participant completion return
["leo","kiki","eden"] ["eden","kiki"] "leo"
["marina","josipa","nikola","vinko","filipa"] ["josipa",filipa","marina","nikola"] "vinko"
["mislav","stanko","mislav","ana"] ["stanko","ana","mislav"] "mislav"

 

문제 풀이

function solution(participant, compleiton) {
  // 첫 번째에 시도한 방법은 completion을 for문으로 돌려서 participant에서 해당 인덱스를 먼저 찾는 방법이다.
  // indexOf를 쓰면 동명이인이 있더라도 먼저 나오는 한 명의 인덱스를 반환하기 때문에 문제 풀이에는 문제가 없었다.
  
  // for(let i = 0; i < completion.length; i++) {
         //let index = participant.indexOf(completion[i])
         // 완주한 선수의 인덱스를 index에 할당을 시켜준다.
         //pariticipant.splice(index, 1)
         // 참가자에서 해당 인덱스의 사람을 splice를 통해 삭제한다.
    // }
    //return participant[0];
         // 반복문을 통해 한 사람만 남게되고 participant는 배열이므로 0번째 인덱스의 인물을 리턴시켰다.
         // 하지만 이 방법을 통해 문제를 풀면 효율성에서 계속 에러가 났다.
         // 다른 방법을 찾던 중, 해당 인덱스를 삭제하는 방법이 컴퓨터에 많은 부하를 준다는 것을 알게되었다.
         
    participant.sort();
    completion.sort();
    // 두 배열을 삭제하지 않는 방법은 우선 이름순으로 정렬하는 것이다.
    
    for(let i = 0; i < participant.length; i++) {
        if(participant[i] !== completion[i]) {
        // 만약 participant[i]와 completion[i]가 같지 않다면 완주한 선수 명단에 없는 사람이므로 바로 리턴을 시켜준다.
            return participant[i]
        }
    }
}
반응형