Javascript

[프로그래머스 Level1] 완주하지 못한 선수 - 나의 코드, 우수코드(Javascript)

728x90
반응형

🚨문제

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

 

코딩테스트 연습 - 완주하지 못한 선수

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

programmers.co.kr

 

 

🔅예제 이해

출발한 사람 배열과 도착한 사람 배열을 비교하여 결승전에 도착하지 못한 한명이 누구인지 찾아내자

 

 

☺️나의 코드

map(), Object.values(), Object.keys()

function solution(participant, completion) {
    //1,2
    const ob = {}
    participant.map((a) => ob[a] ? ob[a]++ : ob[a] = 1);
    //3
    completion.map((a) => ob[a]--);
    //4
    const yetIndex = Object.values(ob).indexOf(1);
    //5
    const answer = Object.keys(ob)[yetIndex];
    return answer;
}

 

 

❗️ 풀이 순서

  1. 출발한 사람의 이름을 key값으로 객체로 만든다. value값은 해당 이름을 가진 사람 숫자로 할것이기에 1로 해준다.
  2. 만약 해당이름을 가진사람이 두명이면 {이름 : 2}이 될 것이다.
  3. 도착한 사람들의 이름을 key값으로 찾아서 출발한 사람 value값을 감소시킨다.
  4. 이때 도착하지 못한 사람의 이름을 가진 key값은 1의 value를 가진다. 해당 키값의 indexindexOf로 가져온다.
  5. keys를 이용해 key로 배열을 만들고 4에서 가져온 index로 출발한 사람 배열에서 해당 index번째 값을 가져온다

 


👍우수 코드

프로그래머스에서 제공하는 다른 사람들의 코드 중 좋아요가 가장 높은 코드

// 우수코드 1번
function solution(participant, completion) {
    const map = new Map();

    for(let i = 0; i < participant.length; i++) {
        let a = participant[i], 
            b = completion[i];

        map.set(a, (map.get(a) || 0) + 1);
        map.set(b, (map.get(b) || 0) - 1);
    }

    for(let [k, v] of map) {
        if(v > 0) return k;
    }

    return 'nothing';
}
//우수코드 1번보고 내 코드 map방식 변경, map두번 안돌리고 한번만 돌림
function solution(participant, completion) {
    const map = new Map();

    participant.map((a, i) => {
        const b = completion[i];
        map.set(a, (map.get(a) || 0) + 1) ;
        if(b !== undefined) map.set(b, (map.get(b) || 0) - 1) ;
    });

    for(let [k, v] of map) {
        if(v > 0) return k;
    }
}

내 코드 / 우수코드 1번 / 우수코드 반영한 내코드

확실히 내가 작성한 코드는 map을 두번 돌려서 그런지 속도가 100ms초과한다.

우수코드 1번과 우수코드를 반영한 내코드는 비슷한 속도를 내는 것 같다.

개인적으로 map을 사용하는게 더 코드도 짧고, 우수코드 처럼 undefined가 결과에 나오지 않는거 같아서, 나는 내 코드가 마음에 든다,,

 

 

❤️배운 점

object보다 map을 자주 사용해야겠다. 속도 면에서 좋은 거 같다.

 

 

https://shanepark.tistory.com/220

 

제발 한국인이라면 자바스크립트 Object를 Map 처럼 사용하지 맙시다.

Photo by Steve Johnson on Unsplash Introduction 오늘 코딩하던 중에 Javascript 에서 만든 Map을 Controller 쪽으로 어떻게 넘길지에 대해 고민 하는 일이 있었습니다. JavaScript 에서는 Object 를 사용하면..

shanepark.tistory.com

 

728x90
반응형