TIL16-09 완주하지 못한 선수

김태혁·2023년 1월 27일
0

TIL

목록 보기
58/205
  • 문제 설명
    수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
    마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
  • 풀이 과정
  1. 두 배열을 for문으로 돌려 비교한 후 포함 되지 않은 값을 찾으려 했다.
  2. 동명이인이 있는 배열에서는 값이 나오지 않았다.
    아래 코드가 실패한 코드이다.
function solution(participant, completion) {
    let answer = "";
    for (let i = 0; i < participant.length; i++) {
        if ( !completion.includes(participant[i])) {
            answer = participant[i]; // 두 배열에서 포함되지 않은 값을 찾는다.
            console.log(answer);
        }; 
    }
    if ( participant.foreach(x =>{//중복값을 제거 해보려 했는데 실패했다.
        if (x = x) {
            return x;
        }
    })) else if{        
    }    
}
console.log(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]));
  1. 중복값을 제거 하려 했는데 도무지 답이 나오지 않았다.
  2. 검색을 통해 힌트를 얻었다. 두 배열 모두 사전식으로 정렬 후 같은 위치에 두요소를 비교할 때 같지 않을때의 값이 동명이인이고, 완주자의 값이 되는 것이다.
  3. 생각을 달리 하면 어렵지 않은 문제이다.
    아래는 완성된 코드이다.
function solution(participant, completion) {
    let a = participant.sort(); // 사전 순으로 정렬
    let b = completion.sort(); 
    for (let i = 0; i < a.length; i++) {
        if ( a[i] !== b[i]) {   //a[i] 와 b[i]가 같지 않을 때
            return a[i];       //a[i] 값을 반환한다. 
        }; 
    }    
}
profile
도전을 즐기는 자

0개의 댓글