๐ ๋ฌธ์
You are given an array of people, people, which are the attributes of some people in a queue (not necessarily in order). Each people[i] = [$h_i$, $k_i$] represents the $i^{th}$ person of height $h_i$ with exactly $k_i$ other people in front who have a height greater than or equal to $h_i$.
Reconstruct and return the queue that is represented by the input array people. The returned queue should be formatted as an array queue, where queue[j] = [$h_j$, $k_j$] is the attributes of the $j^{th}$ person in the queue (queue[0] is the person at the front of the queue).
๐ซ ์์
Input: people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
Output: [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
๐ฑ ์ ํ
- 1 <= people.length <= 2000
- 0 <= $h_i$ <= $10^6$
- 0 <= $k_i$ < people.length
๐ง ๋ฌธ์ ์ ๊ทผ ๋ฐ ํ์ด
์ฌ๋๋ค์ ์ผ๋ ฌ๋ก ์ค์ ์ธ์ ์ ๋, ๋ด ํค์ ๋ด ์์ ์๋ ์ฌ๋ ์ค ๋ด ํค๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ฌ๋์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ฌํ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ๊ตฌ์ฑํ๋ ๋ฌธ์ ์ด๋ค.
๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ๋ ฌ์ด๋ค.
์๋ฅผ ๋ค์ด [[7,2], [7,0], [7,1]] ์ด ์์ ๋ก ์ฃผ์ด์ง ๊ฒฝ์ฐ [[7,0], [7,1], [7,2]] ๋ก ์ ๋ ฌํด์ผ ์ฌ๋ฐ๋ฅธ ๋ต์ด ๋๋ค. $k_i$๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ข ๋ ๋ซ์ด์ ธ๋ผ ์ณ๋ค๋ณด๋ฉด $k_i$๊ฐ ํ์ฌ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๊ณ ์๋ ๊ฑธ ๋ฐ๊ฒฌ ๊ฐ๋ฅํ๋ค.
์ฌ๊ธฐ์ [6,3] ์ด ์ถ๊ฐ ๋ [[7,2], [7,0], [7,1], [6,3]] ์ ์ดํด๋ณด์. ์ด ๊ฒฝ์ฐ์๋ [[7,0], [7,1], [7,2], [6,3]] ์ด ์ ๋ต์ผ๋ก ์ฌ์ ํ $k_i$๋ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด [6,3] ์ด ์๋ [6,1] ์ ์์๋ก ๋ค์ด๋ณด์. [[7,2], [7,0], [7,1], [6,1]] ๊ฐ ์ฃผ์ด์ก์ ๋, [[7,0], [6,1], [7,1], [7,2]] ์ด ์ ๋ต์ด ๋๋ค. [6,1] ์์ $k$๋ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๊ณ ์์ง๋ง [7,1]์ ๋์ด์ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๊ณ ์์ง ์๋๋ค. ๊ทธ๋ผ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ฆฐ๊ฒ์ผ๊น...?
๊ทธ๋ ์ง ์๋ค. [7,1]๋ [6,1] ์ด ์ค๊ธฐ ์ ๊น์ง๋ $k$๊ฐ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๊ณ ์์๋ค. ๋ค์ ๋งํด [6,1] ์ด ์ถ๊ฐ๋์ ์ด์ ์ ๊ฒ๋ค์ ์ธ๋ฑ์ค๋ ๋ฌด์๋๊ณ , ํ์ฌ ์ถ๊ฐ๋๋ ๊ฐ์ $k$๊ฐ ๋ ์ค์ํด์ก๋ค. ํค๊ฐ ํฐ ์์ผ๋ก ๊ฐ์ ์ถ๊ฐํ๊ฒ ๋๋ค๋ฉด ์ดํ์ ์ถ๊ฐ๋๋ ๊ฐ๋ค์ ์ด์ฐจํผ ๋๋ณด๋ค ํค๊ฐ ์์ ํ ๋ ์์ ์ค๋ ๋ค์ ์ค๋ ์๊ด์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ํค๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ $k$ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๊ฐํ์ฌ์ผ ํ๋ค.
๊ทธ๋ผ ์ด๋์ ์ถ๊ฐํด์ผ ํ ๊น? ๋ฐ๋ก $k$, ์ฆ ์ธ๋ฑ์ค์ ํ๋ฉด๋๋ค.
์ ๋ฆฌํ์๋ฉด, ํค ๋ด๋ฆผ์ฐจ์, ๋ด ํค๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ๊ฐ ์์๋ ์ ๋ต ๋ฐฐ์ด ์ธ๋ฑ์ค์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๐ป ์ฝ๋
Python
1 2 3 4 5 6 7 | class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: result = [] for h, k in sorted(people, key=lambda x: (-x[0], x[1])): result.insert(k, [h, k]) return result | cs |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public int[][] reconstructQueue(int[][] people) { Arrays.sort(people, (a1, a2) -> { if (a1[0] != a2[0]) { return a2[0] - a1[0]; } return a1[1]-a2[1]; }); final List<int[]> res = new LinkedList<>(); final int n = people.length; for (final int[] person : people) { res.add(person[1], person); } return res.toArray(new int[n][2]); } } | cs |
Rust
1 2 3 4 5 6 7 8 9 10 11 | impl Solution { pub fn reconstruct_queue(mut people: Vec<Vec<i32>>) -> Vec<Vec<i32>> { people.sort_by_key(|x| (-x[0], x[1])); let mut res = Vec::with_capacity(people.len()); for person in people.iter() { res.insert(person[1] as usize, person.to_vec()); } res } } | cs |
์๊ฐ๋ณต์ก๋๋ ์ ๋ ฌํ ๋ $O(n * log n)$, ๊ฐ ์ถ๊ฐํ ๋ ์ต์ ์ ๊ฒฝ์ฐ $O(n)$ ์ด๋ฅผ $n$ ๋ฒ ๋ฐ๋ณต์ด๋๊น ์ด $O(n^2)$ ์ด ๋์จ๋ค.
์๋ฐ๋ก ๋ฌธ์ ํ ๋ ArrayList ๋ง๊ณ LinkedList ์ฌ์ฉํ๋ฉด ์ข ๋ ๋น ๋ฅด๋ ค๋? ํ๊ณ ๋ฐ๊ฟ๋ณด์๋ค. ArrayList ์ฌ์ฉํ๋ฉด ๊ฐ ์ฐพ๋๋ฐ $O(1)$ ๊ทธ ๊ฐ ์ดํ์ ๊ฐ๋ค ์ ๋ถ ํ์นธ์ฉ ๋ค๋ก ๋ฏธ๋ ์์ ์ด $O(n)$์ด๊ณ , LinkedList ์ฌ์ฉํ๋ฉด ๊ฐ ์ฐพ๋๋ฐ $O(n)$ ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ ธ๋ ์ฃผ์ ๋ณ๊ฒฝํ๋๋ฐ $O(1)$ ์ด๋ฏ๋ก ๋ ๋ค $O(n)$ ์ด์ง๋ง, ์ ๋ถ ํ์นธ์ ๋ค๋ก ๋ฏธ๋ ์์ ์ด ๊ฐ ์ฐพ๋ ์์ ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์๋ค. ํ์ง๋ง ์ ์๋ฏธํ ์ฐจ์ด๋ ์์๋ค.
๊ทธ๋๋ ์ฌ๊ธฐ์ ๋ฆฌ์ค์ฝํ ์นํ์์น์ ๋ง์ ๋ดค๋ค. ArryaList๋ก ๊ตฌํํ๋ ๊ฒ์ LinkedList๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ๋ฐ๊พผ ์ฝ๋๋ ๋จ ํ์ค, ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํ ๋์๋ค. ps ํ๋ฉด์ ๊ฐ์ฒด์งํฅ ๋๊ปด๋ณด๋๊ฑด ๊ฑฐ์ ์ฒ์์ด์๋ค.
๐ ๋ฌธ์ ๋งํฌ
'Problem Solving > ๋ฆฌํธ์ฝ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 2563. Count the Number of Fair Pairs (0) | 2024.11.13 |
---|---|
[LeetCode] 3036. Number of Subarrays That Match a Pattern II (0) | 2024.02.11 |
[LeetCode] 380. Insert Delete GetRandom O(1) (1) | 2024.01.21 |
[LeetCode] 1657. Determine if Two Strings Are Close (1) | 2024.01.14 |