몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 1] 완주하지 못한 선수 {언어 : JavaScript} 본문

알고리즘

프로그래머스 [Lv. 1] 완주하지 못한 선수 {언어 : JavaScript}

스위태니 2024. 3. 7. 15:48

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드 1

function solution(participant, completion) {
    let answer = "";
    const pDict = {};
    for (const p of participant) {
        const isValid = pDict[p];
        if (isValid) {
            pDict[p] += 1;
        } else {
            pDict[p] = 1;
        };
    };
    for (const cp of completion) {
        pDict[cp] -= 1;
    };
    for (const p of participant) {
        if (pDict[p]) {
            answer = p;
            break
        };    
    };
    return answer;
}

정답 코드 2

function solution(participant, completion) {
    const answer = participant.find(p => !completion[p]--, completion.map(cp => completion[cp] = (completion[cp]|0)+1))
    return answer;
}

풀이 방법

  1. 참가 선수를 전부 딕셔너리에 넣는다.
    1. 이미 있을 경우 += 1을 한다.
  2. 결승점에 도달한 선수를 딕셔너리에서 찾고 1을 뺀다.
  3. 참가 선수 전원을 순회하면서 남은 한 명을 찾는다.

느낀점

  • 정답 코드 2처럼 짧게 쓰는 방법도 있다. 하지만 속도는 위가 아주 미세하게 빠르게 나왔고 (환경에 따라 차이가 있을 수 있음) 가독성도 떨어지는 점이 단점이라고 할 수 있다.
  • 하지만 간지나잖아... (나는 아직 저렇게 풀 수준은 아니다.)