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

Jake Seo·2020년 6월 12일
0

js-leet-code

목록 보기
9/9

이건 그냥 프로그래밍에서 Dictionary를 사용할 수 있는지 테스트하는 문제 같음.

function solution(participant, completion) {
    let counter = {};
    // 참가자들 counter에 넣고 completion을 이용해 숫자 빼기
    // 동명이인 처리를 위해서... -> 아니면 filter 함수가 효율적
    for(let i=0; i<participant.length; i++) {
        // 카운터에 없다면
        if(counter[participant[i]] === undefined) {
            // 1 넣어주기
            counter[participant[i]] = 1;
        }
        // 카운터에 있다면
        else {
            // 1 더해주기
            counter[participant[i]] += 1;
        }
    }

    for(let i=0; i<completion.length; i++) {
        // 완주자는 참가자의 부분집합이므로 존재하는지 검증 필요없음
        counter[completion[i]] -= 1;
    }

    // 필터로 정답자 걸러내기 -> 1인 요소만
    return Object.keys(counter).filter((ele) => counter[ele] === 1)[0];;
}

map과 3항연산자 이용해 짧게 풀면 아래와 같다.

function solution(participant, completion) {
    let counter = {};
  
  	participant.map((p) => {counter[p] = counter[p] ? counter[p]+1 : 1});
	completion.map((c) => {counter[c] = counter[c]-1});
  
    // 필터로 정답자 걸러내기 -> 1인 요소만
    return Object.keys(counter).filter((ele) => counter[ele] === 1)[0];;
}
profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글