완주하지 못한 선수

2022-07-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”

입출력 예 설명

예제 #1

“leo”는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2

“vinko”는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3

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

solution

const solution = (participant, completion) => participant.filter(arg => !completion.includes(arg))[0];

테스트 결과 (~˘▾˘)~

3개 중 2개 성공

실행한 결괏값 undefined가 기댓값 “mislav”과 다릅니다.

동명 2인처리를 어떻게 할지 잘 생각이 나지 않음

다른 사람 solution

var solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))

변수명을 너무 어렵게 해놔서 수정해봄

var solution = (participant,completion) =>
    participant.find(
        name =>
            !completion[name]--,
            completion.map(
                name => completion[name]=(completion[name]|0)+1
            )
    )

위 로직도 이해가 어렵고,

var solution = (participant,completion) =>
    completion.map(
        name => completion[name]=(completion[name]|0)+1
    )
    // [mislav: 1, stanko: 1, ana: 1]


    participant.find(
        name => !completion[name]--
    )
    // 수행하고 나면 [mislav: -1, stanko: 0, ana: 1] 이렇게 되나
    // 이 시점에서 [mislav: 0, stanko: 0, ana: 1]
    // mislav 를 한번더 !0 했을때 true가 떠서 ana까지 수행은 안된것으로 보임

Array.prototype.find()

find 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.

예시

const array1 = [5, 12, 8, 130, 44];

const found = array1.find(element => element > 10);

console.log(found);
// expected output: 12

해답에서는 find 에 전달인자가 2개 주어졌는데,

2번째가 먼저 실행되고, 처음게 실행되는거 같아 보입니다.

mdn에도 나오지 않아서, 겁나 했갈렸고, 남이 짠 소스도 바로바로 해석이 안되는거 보면 아직 멀었나 봅니다.

풀이 과정 중 본 받을점

동명 2인처리를 매핑으로 깔끔하게 처리하고,

새로운 맵핑을 만들지 않고, 바로 name에 값을 넣은 것과

completion[name]

find를 쓴 다음 !0 으로 값을 찾는 로직이 기가 막혔습니다.

results matching ""

    No results matching ""

    99 other / uml

    04 react / JSX