완주하지 못한 선수

Jaemin Jung·2021년 6월 16일
0

Algorithm

목록 보기
3/8
post-thumbnail

문제설명

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

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

내가 작성한 코드

function solution(participant, completion) {
    
    participant
    
    let answer = participant.filter( (el => {
        return !completion.includes(el) 
    }))
    
    return answer[0];
}

처음에는 participant의 이름중 completion에 포함 안되는 이름은 완주하지 못한 선수일 것이군!
하고 filter를 이용해 filtering하였다.
하지만 동명이인이 있을 경우가 발목잡혔다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

수정한 코드

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

}

좀처럼 방법이 떠오르질 않았다.
질문하기 버튼이 있길래 눌러보았는데, 질문 제목에서 sort가 많이 보였다.
그순간 다행히 바로 로직이 떠올랐다.
sort를 이용해서 두 배열의 요소를 정렬하여 반복문으로 순회한다면,
포함안된 이름이 있을때부터 두 배열의 요소는 같지 않을것이다.
그점을 이용해서 두 배열의 요소가 맞지 않을때 participant의 해당 요소를 리턴하였다.
(completion은 완주한 선수 목록이기 때문)

채점 결과

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42576

profile
내가 보려고 쓰는 블로그

0개의 댓글