λ¬Έμ νμ
λΉ λ΄λ¦Όμ°¨μμΈ λ μ μ λ°°μ΄ nums1
κ³Ό nums2
κ·Έλ¦¬κ³ k
κ° μ£Όμ΄μ§λ€.
k
κ°μ κ°μ₯ ν©μ΄ μμ pair
λ₯Ό λ°νν΄μΌνλ€.
νμ΄
1οΈβ£ PriortyQueue μ μΌμ’ μ 그리λ λ²μ νμ©
π‘ μ°Έκ³ ν Idea
μ΄λ² λ¬Έμ λ, μ무리 μ΄μ¬ν λ μ¬λ €λ΄λ μκ° μ΄κ³Ό & λ©λͺ¨λ¦¬ μ΄κ³Ό λλ¬Έμ ν΄κ²°νμ§ λͺ»νκ³ λ€λ₯Έ μ¬λμ μμ΄λμ΄λ₯Ό μ°Έκ³ νμ¬ ν΄κ²°νμλ€.
ν΅μ¬ μμ΄λμ΄λ λ€μκ³Ό κ°λ€.
λ¨Όμ , λ μμμ ν©μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ μ°μ μμ νλ₯Ό μ€λΉνλ€.nums1
λ°°μ΄μ μΈλ±μ€λ 0 μΌλ‘ κ³ μ ν μ±,nums2
λ°°μ΄μ μννλ©° ν©μ ꡬνκ³ μ°μ μμ νμ μ λ ₯νλ€.
μ°μ μμ νμλ [ nums1μ κ°, nums2 μ κ°, nums1μ μΈλ±μ€, nums1μ κ° +nums2μ κ° ] μΌλ‘ μ λ ₯ν΄μ€λ€.
μ΄μ μ°μ μμ νμμpoll()
μ νλλ° μ¬κΈ°μpoll()
ν κ°μ νμμ λ μμμ ν©μ΄ κ°μ₯ μμ κ°μ΄ μΆμΆλ κ²μ΄λ€.
κ·Έλ κ²poll()
ν κ°μμnums1
μ μΈλ±μ€λ₯Ό 1 μΆκ°ν΄μ£Όκ³ (nums1
λ°°μ΄μ κΈΈμ΄λ₯Ό μ΄κ³Όνμ§ μλ ν)
μ°μ μμ νμ λ€μ λ£μ΄μ€λ€.
μ΄ κ°μ λ€μ λ£μ΄μ£Όλ μ΄μ λ, μ΄ κ°μ μ κ±°λΉν κ°κ³Ό κ°μ₯ λΉμ·ν μμΉμ λ€λ₯Έ μμ΄ λ μ μκ³ μ΄ ν©μ΄ μ΄λ―Έ λ€μ΄κ° λ€λ₯Έ μλ³΄λ€ μ μ ν©μ΄ λμ¬ μ μκΈ° λλ¬Έμ΄λ€.
λ§λ‘ μ€λͺ νλ μ½κ° μ΄ν΄νκΈ° νλ€ μ μλλ°, μ½λλ₯Ό 보면 μ΄ν΄κ° μ λ κ²μ΄λ€.
import java.util.*;
class Solution {
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
List<List<Integer>> ans = new ArrayList<>();
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[3] - b[3]);
for (int i = 0; i < Math.min(k, nums2.length); i++) {
pq.offer(new int[]{nums1[0], nums2[i], 0, nums1[0] + nums2[i]});
}
while (!pq.isEmpty() && k-- > 0) {
int[] poll = pq.poll();
int num1 = poll[0], num2 = poll[1];
ans.add(List.of(num1, num2));
int idx1 = poll[2];
if (idx1 + 1 < nums1.length) {
// num2μ μ κ±°ν num1 λ€μ μλ μμ μ‘°ν©μ μΆκ°
pq.offer(new int[]{nums1[idx1 + 1], num2, idx1 + 1, nums1[idx1 + 1] + num2});
}
}
return ans;
}
}
κ²°κ³Ό
π νκ³
μ§κΈκΉμ§ νμλ μ°μ μμ ν κ΄λ ¨ λ¬Έμ μ€μ κ°μ₯ μ΄λ €μ λ λ¬Έμ μλ€.
μ°μ μμ νλ₯Ό νλμλ μ΄λ€ 쑰건μ κΈ°μ€μΌλ‘ μ λ ¬νμ¬ νμ λ£μ΄μΌ λ΅μ ꡬν μ μλμ§λ₯Ό μ νμ ν΄μΌνλ κ² κ°λ€κ³ λκΌλ€.