본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 완주하지 못한 선수 자바스크립트 풀이

by 개발지망생 2023. 3. 29.

👁‍🗨 문제 설명

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

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

❌ 제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

 

입출력 예
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, completion) {
    let 답 = '';
    participant.sort();
    completion.sort();
    
    for (let i = 0; i < participant.length; i++) {
        if (participant[i] !== completion[i]) {
            답 = participant[i];
            return 답
        }
    }
}

 

나의 풀이 순서도

  1. 제한사항에 동명이인이 있지만 않았어도 filter 함수로 날먹을 하려 했다.
  2. 동명이인의 제한사항을 고려한 상태에서 문제를 접근했으며, 해쉬문제라 적혀있었지만 배열이 너무 맛있게 있는 바람에 정렬로 풀기로 결정했다.
  3. 각자의 배열을 sort 메서드를 사용해 정렬해 주었다.  js의 sort메서드 구현방식은 QuickSort이고 시간복잡도는 nlogn이니 해당 문제의 마라톤 참여인원이 100,000명이하를 고려했을 때 적절하다 생각했다.
  4. 각자의 배열에 순서에 있는 인원들을 비교해 맞지 않는 인원을 답으로 return 하였다. 끝

댓글