Skip to content

Commit 9566af8

Browse files
author
jinvicky
committed
top k frequent 복습 및 주석 갱신
1 parent e09e898 commit 9566af8

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

top-k-frequent-elements/jinvicky.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@
44

55
class Solution {
66
public int[] topKFrequent(int[] nums, int k) {
7-
// [풀이]
8-
// 1. <숫자: 빈도수>를 저장하는 HashMap과 [빈도수, 숫자]를 저장하는 PriorityQueue를 선언한다.
9-
// 2. HashMap에 숫자별로 빈도수를 함께 저장해서 해시테이블을 만든다.
10-
// [우선순위 큐에 사용된 자료구조]
11-
// 1. 별도 클래스를 선언
12-
// 2. 요구사항 자료형 배열을 선언한다.
13-
// 처음에는 별도 클래스를 선언했다가 값이 2개이며 알고리즘 로직 자체가 어려워서 int[] 구조로 풀이했다.
14-
// (주로 알고리즘이 어려우면 가독성이 나쁘더라도 자료구조를 단순화하는 습관이 있다)
15-
// [어려웠던 점]
16-
// 1. 우선순위 큐는 매번 요소가 추가될 때마다 내부 정렬을 수행하기 때문에 연산을 수행하면서 k개를 유지해야 한다.
17-
// 또한 기존 [빈도수, 숫자]를 버려야만 올바른 답을 도출할 수 있었다.
18-
// 2. [숫자, 빈도수]로 저장하는 것만 생각했더니 내부 정렬을 어떻게 하지 못해서 굉장히 고민했다. 정답은 반대였다.
19-
7+
/**
8+
* for문이 총 3번 필요하다. (1.빈도_초기화, 2.큐에 저장, 3.결과배열에 할당
9+
* 빈도_초기화 -> k:v로 쉽게 저장하는 자료구조
10+
* 큐에 저장 -> 최소 힙으로 정렬되는 우선순위 큐 선언 -> 큐 같은 자료구조에서 k:v를 하고 싶다면 new int[2]가 가장 쉬움
11+
* 결과배열에 할당 -> k개만큼 answer[]에 저장
12+
*
13+
* 문제는 상위 k개를 유지해야 하고 그를 위해서는 k개를 넘었을 때 빈도수가 낮은 순으로 flush하는 로직이 필요하다는 것.
14+
* 큐는 선입선출 -> 빈도수가 낮을 수록 위로 정렬되게 해야 flush했을 때 빈도수가 낮은 순서대로 사라진다.
15+
*
16+
* 결과배열에 할당할 때는 그냥 앞에서부터 하면 된다.
17+
* 이미 k개를 만족했고, 빈도수가 낮 -> 높 순서대로 그대로 쌓으면 된다.
18+
*
19+
* 우선순위큐에 할당할 때 [숫자, 빈도수]로 생각했지만, [빈도수, 숫자]가 맞았다.
20+
*/
2021
int[] answer = new int[k];
2122

2223
Map<Integer, Integer> map = new HashMap<>();

0 commit comments

Comments
 (0)