프로그래머스 | 완주하지 못한 선수

imzzuu·2022년 4월 25일
0

완주하지 못한 선수


문제 설명

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

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

제한사항

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

입출력 예

participantcompletionreturn
["leo", "kiki", "eden"]["eden", "kiki"]"leo"
["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"
["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"]"mislav"

내 풀이


// find 사용
function solution(participant, 	completion) {
    const par = participant.sort()
    const comp = completion.sort()
    return par.find((e,index)=> e !== comp[index])
}

//for문 사용
function solution(participant, 	completion) {
    const par = participant.sort()
    const comp = completion.sort()
for(let i = 0; i < par.length; i++){
        if(par[i] !== comp[i]) return par[i]
    }
return par.join("");
}
  1. 양쪽 배열(참여자, 완료자)에 같은 이름에 같은 index를 부여해서 비교하기 위해 sort 함수를 사용해 재정렬한다.
  2. 참여자 배열을 돌면서 이름이 완주자 배열의 index번째 이름과 일치하지 않는 첫 번째 요소를 find 함수를 통해 반환한다.
    (이 예제에서 만큼은 첫 번째 요소만 return 해도 상관이 없어서 사용)

어려웠던 점 및 느낀 점


처음엔 해시에 대해 안 찾아보고 일단 풀어봄
그래서 배열과 문자열로 접근하여 아래와 같은 코드를 작성했다.

function solution(par, comp) {
    var answer = '';
    answer = par.filter(n=>!comp.includes(n)).join('')
    return answer;
}

하지만, 이 풀이는 해시와 관련도 없고, 케이스 3의 경우 중복을 골라낼 수 없었다.

  1. 중복 골라내기

    해시를 배우니 key와 value 를 이용한 자료구조이며, 이전에 react를 배우면서
    object 구조는 같은 문자열이어도 주소 값이 다르면 참, 거짓을 판별할 때 false 가 나온다는 내용이 생각나서, key나 index를 활용해야겠다고 생각했다.

  2. 같은 이름에 같은 index 부여하기

    그렇다면, index를 부여하는데...양쪽 배열(참여자, 완료자)에 같은 이름에 같은 index를 부여하지? 라는 고민을 한참 했다.

    구글링 결과 sort 함수로 정렬하는 방법을 찾아냈다! 완전 유레카!!! 정말 다들 넘나 똑똑하다...ㅠ

다 풀고나서 아쉬운 점이 있다면, 찐 해시를 이용하지 않은 것 같고, 정말 일치하지 않은 데이터를 걸러내지 못하는 코드라는 점이다. 만약 완주하지 못한 인원이 1명 이상인 케이스라면 이 솔루션은 사용할 수 없기 때문이다.

map, get, set 을 활용해 푼 풀이들이 있었는데 처음 보는 함수들이라 이 부분을 더 찾아보아야겠다!

profile
FrontenDREAMER

0개의 댓글