TIL 20221130 - 148번(Map)

hoin_lee·2022년 11월 30일
0

TIL

목록 보기
113/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm

JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS

React 강의 듣기
https://github.com/hoinlee-moi/React_prac


감기가 더 심해졌는데 코에 누가 풍선을 불어놓은 것 마냥 땡땡한 느낌이...
아주 인상적이다^^
볼 사람이 있겠나 싶겠지만 환절기에 감기 조심했으면 좋겠다! 다들!
특히 내가 좋아하는 사람들은 건강하길

오늘 알고리즘

완주하지 못한 선수

일단 문제 난이도 자체는 쉬웠다.
쉬운데 효율성 문제에서 계속 막혔으며 결국 힌트를 통해 해결했다.
이제 점점 효율성에 대해 나오는데 확실히 공부가 필요한 시점인 것 같다. 밀린 강의들도 들어야 하고 왜 이렇게 진도가 못나가는지.. 다시 정신 무장이 필요한 시점이다.

function solution(participant, completion) {
    participant.sort();
    completion.sort();
    for(let i=0; i<=participant.length-1; i++) {
        if(participant[i]!=completion[i]) return participant[i]
    }
}
  • 각 배열을 sort 로 정돈한 뒤 각 배열의 순서의 값과 일치하지 않으면 리턴하도록 한다.
  • 이는 배열간의 길이의 차가 1인 것을 근거로 할 수 있다.
  • 다만 Map을 이용한 풀이가 있었는데 효율이 더 좋게 나왔다.
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';
}
  • 먼저 Map 개체를 하나 만든다.
  • 서로 1차이가 나기 때문에 participant를 기준으로 반복을 실행한다
  • 이때 각 배열(paricipant,completion)의 값을 a와 b라는 변수에 담는다
  • map.set을 이용해 keyvlaue 값으로 저장
  • a가 키이며 뒤에 map(get(a)||0)+1이 밸류이다.
  • 이는 participant에 있는 선수들을 for문을 돌며 출전 선수로 key값을 올리고 value에 1을 더한다.(||연산자를 통해 이미 key값으로 들어온 선수면 value값을 주고 아니면 0을 value로 지정)
  • 그리고 completion의 반복을 통해 들어온 선수 값을 map.set으로 넣어 -1을 시킨다.
  • 결론적으로 출전한 선수가 +1이 되고 다시 도착한 선수로 -1 시키면 0이 됨으로 도착하지 않은 선수는 0보단 큰 값이 나오게 된다.(출전으로 +1만 되고 도착하지 않아 -1이 되지 않았기 때문에)
  • 이는 동명이인일때도 2선수가 나와 +2가 됐지만 한명은 도착하여 -1 돼도 0보다 큰값이기 때문에 값이 도출될 수 있다.
    EX)

Map

Map개체는 키-값 쌍을 보유하고 키의 원래 삽입 순서를 기억한다.

const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

console.log(map1.get('a'));
// expected output: 1

map1.set('a', 97);

console.log(map1.get('a'));
// expected output: 97

console.log(map1.size);
// expected output: 3

map1.delete('b');

console.log(map1.size);
// expected output: 2

맵(Map)은 키가 있는 데이터를 저장한다는 점에서 객체와 유사하다. 다만, 맵은 키에 다양한 자료형을 허용한다는 점에서 차이가 있다

맵에는 다음과 같은 주요 메서다와 프로퍼티가 있다

  • new Map() – 맵을 만듭니다.
  • map.set(key, value)key를 이용해 value를 저장합니다.
  • map.get(key)key에 해당하는 값을 반환합니다. key가 존재하지 않으면 undefined를 반환- 합니다.
  • map.has(key)key가 존재하면 true, 존재하지 않으면 false를 반환합니다.
  • map.delete(key)key에 해당하는 값을 삭제합니다.
  • map.clear() – 맵 안의 모든 요소를 제거합니다.
  • map.size – 요소의 개수를 반환합니다.
profile
https://mo-i-programmers.tistory.com/

0개의 댓글