일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react-native
- 소수찾기
- Algorithm
- sorting
- 가장 큰 수
- 기능개발
- Virtual DOM
- Queue
- 주식
- Programmers
- heap
- Brute Force
- hash
- browser workflow
- 디스크 컨트롤러
- react-native bind
- k번째수
- 완주하지 못한 선수
- 깊이우선탐색
- react-native-navigation
- 더 맵게
- 다리를 지나는 트럭
- react
- 전화번호 목록
- 이중우선순위큐
- 타겟 넘버
- 넓이우선탐색
- Javascript
- Data Structure
- Stack
- Today
- Total
개발 블로그
[프로그래머스/Javascript/Hash] 베스트앨범 본문
1. 문제 설명(출처: programmers.co.kr/learn/courses/30/lessons/42579)
2. 문제 풀이
1) 문제에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다 라고 하였으니, 장르별로 구분하기 위해 hash를 사용한다.
2) 모든 장르에 대하여 아래 명령을 반복한다.
2-1) 만약 hmap에 해당 장르가 이미 있다면
2-1-T1) 해당 장르의 value를 sum과 list 로 분해한다.
2-1-T2) 해당 장르를 (genre, [누적 play수 + 해당 play수, [ [다른 노래 play수, 다른 노래 고유번호], .... , [해당 노래 play수, 해당 노래 고유번호] ] ]의 형태로 저장한다.
2-1-F1) 해당 장르를 (genre, [해당 play수, [ [해당 노래 play수, 해당 노래 고유번호] ] ]의 형태로 저장한다.
3) 모든 장르에 대하여 누적 play 순으로 내림차순 정렬한 뒤, 정렬한 값을 sortedGenreList에 저장한다.
ex) [ [ 3100, [ [600, 1], [2500, 4] ] ], [ 1450, [ [500, 0], [150, 2], [800, 3] ] ] ]
4) sortedGenreList에 저장된 값을 각 노래의 play 순으로 내림차순 정렬한 뒤, 정렬한 값을 sortedPlaysInfo에 저장한다.
ex) [ [ [ 2500, 4 ], [ 600, 1 ] ], [ [ 800, 3 ], [ 500, 0 ], [ 150, 2 ] ] ]
5) 답을 저장할 배열 answer를 만든다.
6) 모든 sortedPlaysInfo에 대하여 아래 명령을 반복해서 수행한다.
6-1) 문제에서 장르별로 두 개씩 모아서 베스트 앨범을 출시한다 라고 하였으니, 각 장르별로 앞에서 2개씩 노래를 꺼내서 two에 저장한다.
6-2) two에 저장된 각 노래의 고유 번호를 answer에 순서대로 저장한다.
7) answer를 반환한다.
3. 결과 코드
function solution(genres, plays) {
var hmap = new Map()
genres.map((genre, i) => {
if(hmap.has(genre)){
var [sum, list] = hmap.get(genre)
hmap.set(genre, [sum + plays[i], list.concat([[plays[i], i]])])
}else{
hmap.set(genre, [plays[i], [[plays[i], i]]])
}
})
const sortedGenreList = [...hmap.values()].sort((a, b) => b[0] - a[0])
const sortedPlaysInfo = sortedGenreList.map((playsInfo) => playsInfo[1].sort((a, b) => b[0] - a[0]))
var answer = []
for(let playsInfo of sortedPlaysInfo){
const two = playsInfo.splice(0, 2)
two.map((t) => answer.push(t[1]))
}
return answer;
}
'IT > Programmers' 카테고리의 다른 글
[프로그래머스/Javascript/Brute Force] 소수 찾기 (0) | 2021.04.13 |
---|---|
[프로그래머스/Javascript/Brute Force] 모의고사 (0) | 2021.04.12 |
[프로그래머스/Javascript/Hash] 위장 (0) | 2021.04.11 |
[프로그래머스/Python3/Hash] 전화번호 목록 (0) | 2021.04.10 |
[프로그래머스/Javascript/Hash] 완주하지 못한 선수 (0) | 2021.04.09 |