[프로그래머스 코딩테스트 고득점 Kit] 완주하지 못한 선수

doongdoong·2020년 10월 3일
0

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

풀이

  1. 참가자 명단을 매핑한다
{
  [참가자이름]: {
    name: 참가자이름,
    isPass: 통과한 수 (동명이인이 존재하므로)
    count: 참가자 수 (동명이인이 존재하므로)
  }
}
  1. 통과 목록을 순회하면서 매핑한 isPass를 증가신킨다.
  2. isPass(통과한 수)와 count(참가자 수)가 다르면 완주하지 못한 선수로 판별한다.
function mapper(participant) {
    const map = {};
    participant.forEach(p => {
        map[p] = {
            name: p,
            isPass: 0,
            count: map[p] && map[p].count ? map[p].count + 1 : 1,
        }
    });
    
    return map;
}

function pass(completion, map) {
    completion.forEach(c => {
        map[c].isPass++;
    });
}

function getNotPassedParticipant(map) {
    const [{ name: isNotPassedParticipantName }] = Object.values(map)
        .filter(ObjP => ObjP.isPass !== ObjP.count);
    
    return isNotPassedParticipantName;
}

function solution(participant, completion) {
    const map = mapper(participant);
    
    pass(completion, map);
    
    return getNotPassedParticipant(map);
}
profile
PS 연습장

0개의 댓글