1 minute read

Day11

해시 테이블

  • 문제 : 베스트 앨범
  • 정답코드 ```javascript // 1. 같은 장르끼리 묶는다. // 02. 묶인 노래들을 재생 순으로 정렬한다. // 3. 노래를 2개까지 자른다.

function solution(genres, plays) { const genreMap = new Map(); genres .map((genre, index) => [genre, plays[index]]) .forEach(([genre, play], index) => { const data = genreMap.get(genre) || { total: 0, songs: [] }; genreMap.set(genre, { total: data.total + play, songs: […data.songs, { play, index }] .sort((a,b) => b.play - a.play) .slice(0, 2) }) }); return […genreMap.entries()] .sort((a,b) => b[1].total - a[1].total) .flatMap(item => item[1].songs) .map(song => song.index) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- 문제 : [테이블 해시 함수](https://school.programmers.co.kr/learn/courses/30/lessons/147354)
- 정답코드


- 문제 : [보석 쇼핑](https://school.programmers.co.kr/learn/courses/30/lessons/67258)
- 정답코드


## 그래프

- 문제 : [가장 먼 노드](https://school.programmers.co.kr/learn/courses/30/lessons/49189)
- 정답코드
```javascript
function solution(n, edge) {
    const graph = Array.from(Array(n + 1), () => []);
    for (const [src, dest] of edge) {
        graph[src].push(dest);
        graph[dest].push(src);
    }

    const distance = Array(n + 1).fill(0);
    distance[1] = 1;

    //BFS
    const queue = [1];
    while (queue.length > 0) {
        const src = queue.shift(); // shift는 O(n)이지만 요소가 적을 경우에는 자바스크립트 엔진이 최적화 해준다.
        for (const dest of graph[src]) {
            if (distance[dest] == 0) {
                if (distance[dest] === 0) {
                    queue.push(dest);
                    distance[dest] = distance[src] + 1;
                }
            }
        }
    }
    const max = Math.max(...distance);
    return distance.filter(item => item === max).length;
}

Categories:

Updated: