|
| 1 | +package leetcode_study |
| 2 | + |
| 3 | +/** |
| 4 | + * ์ฃผ์ด์ง ์ซ์๋ค์์ ๋น๋ ์๊ฐ ๊ฐ์ฅ ํฐ k ๊ฐ์ ์ซ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ . map ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด ํด๊ฒฐ |
| 5 | + * ์๊ฐ ๋ณต์ก๋ : O(nlogn) |
| 6 | + * -> Int Array๋ฅผ ์ํํด map์ ๋ด๋ ๊ณผ์ O(n) |
| 7 | + * -> ์ฑ์์ง Map ์๋ฃ๊ตฌ์กฐ์์ value ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ๊ณผ์ O(nlogn) |
| 8 | + * -> ์ ๋ ฌ๋ Map์์ K ๋งํผ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ณผ์ O(K). (k๋ ์์) |
| 9 | + * ๊ฐ ๋จ๊ณ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ฉด : O(n) + O(nlogn) + O(k) -> O(nlogn) |
| 10 | + * ๊ณต๊ฐ ๋ณต์ก๋ : O(n) |
| 11 | + * -> Int Array์ ์กด์ฌํ๋ ์ ๋ํฌํ ์์ ๋งํผ ํ์ํจ. |
| 12 | + */ |
| 13 | +fun topKFrequent(nums: IntArray, k: Int): IntArray { |
| 14 | + val map = mutableMapOf<Int, Int>() |
| 15 | + |
| 16 | + for (i in nums.indices) { |
| 17 | + if (map.containsKey(nums[i])) { |
| 18 | + val value = map[nums[i]]!! |
| 19 | + map[nums[i]] = value + 1 |
| 20 | + } else { |
| 21 | + map.putIfAbsent(nums[i], 1) |
| 22 | + } |
| 23 | + } |
| 24 | + val sortedMap = map.toList().sortedByDescending { it.second }.toMap() |
| 25 | + return sortedMap.entries.take(k).map { it.key }.toIntArray() |
| 26 | +} |
| 27 | + |
| 28 | +/** |
| 29 | + * ์ฃผ์ด์ง ์์ ๋น๋์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ซ์๋ฅผ ํ ๋นํ๊ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ํํด k ๊ฐ์ ์ซ์๋ฅผ ์ป๊ฒ ๋๋ฉด ๋ต์ ๋์ถํ๋ ๋ฐฉ๋ฒ |
| 30 | + * ์๊ฐ ๋ณต์ก๋ : O(n) |
| 31 | + * -> Int Array๋ฅผ ์ํํด map์ ๋ด๋ ๊ณผ์ O(n) |
| 32 | + * -> ๋น๋์ ๋ฐฐ์ด์ ๊ฐ์ ์ฑ์ฐ๋ ๊ณผ์ O(n) |
| 33 | + * -> ๋น๋์ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ํํด k ๊ฐ๋ฅผ ๋ง์กฑํ๋ฉด ๋ต์ ๋์ถํ๋ ๊ณผ์ O(n). |
| 34 | + * ์ด์ค for loop ์ด์ง๋ง ์ค์ ๋ก๋ ๋น๋์๊ฐ ์ ์ผํ ์ซ์๋ค๋ง ๊ณ ๋ ค๋๋ฏ๋ก k๊ฐ n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ O(n)์ผ๋ก ๊ฐ๋ ํ ์ ์์. |
| 35 | + * ๊ฐ ๋จ๊ณ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ฉด : O(n) + O(n) + O(n) -> O(n) |
| 36 | + * ๊ณต๊ฐ ๋ณต์ก๋ : O(n) |
| 37 | + * -> Int Array์ ์กด์ฌํ๋ ์ ๋ํฌํ ์์ ๋งํผ ํ์ํจ. |
| 38 | + */ |
| 39 | +fun topKFrequent01(nums: IntArray, k: Int): IntArray { |
| 40 | + val map = mutableMapOf<Int, Int>() |
| 41 | + for(num in nums) { |
| 42 | + map[num] = map.getOrDefault(num, 0) + 1 |
| 43 | + } |
| 44 | + |
| 45 | + // count List ์ด๊ธฐํ |
| 46 | + // map์ value๋ nums Size๋ฅผ ๋์ ์ ์์. |
| 47 | + val countList = Array(nums.size + 1) { mutableListOf<Int>() } |
| 48 | + for ((key, value) in map) { |
| 49 | + countList[value].add(key) |
| 50 | + } |
| 51 | + |
| 52 | + val result = mutableListOf<Int>() |
| 53 | + for (i in countList.size - 1 downTo 0) { |
| 54 | + for (num in countList[i]) { |
| 55 | + result.add(num) |
| 56 | + if (result.size == k) { |
| 57 | + return result.toIntArray() |
| 58 | + } |
| 59 | + } |
| 60 | + } |
| 61 | + return result.toIntArray() |
| 62 | +} |
0 commit comments