
https://www.acmicpc.net/problem/1655
π€ μλ°λ‘ νΈλ κ°μ΄λ°λ₯Ό λ§ν΄μ λ¬Έμ νμ΄
π λ¬Έμ κ°μ
- μ«μκ° νλμ© μ£Όμ΄μ§ λλ§λ€, μ§κΈκΉμ§ μ λ ₯λ μλ€ μ€ κ°μ΄λ° μλ₯Ό μΆλ ₯νλ λ¬Έμ μ λλ€.
- λ¨, μ λ ₯μ μ€μκ°μΌλ‘ μ£Όμ΄μ§λ©°, λͺ¨λ μλ μ μμ λλ€.
π‘ μμ μ λ ₯
7
1
5
2
10
-99
7
5
μμ μΆλ ₯
1
1
2
2
2
2
5
π μκ³ λ¦¬μ¦ μ κ·Ό λ°©μ
μ΄ λ¬Έμ λ μ€κ°κ°(Median)μ μ€μκ°μΌλ‘ κ΄λ¦¬νλ κ²μ΄ ν΅μ¬μ λλ€.
β ν΅μ¬ μμ΄λμ΄: λ κ°μ ν(PriorityQueue)
- μ΅λ ν (μΌμͺ½): μ€κ°κ°λ³΄λ€ μμ μλ€μ μ μ₯
- μ΅μ ν (μ€λ₯Έμͺ½): μ€κ°κ°λ³΄λ€ ν° μλ€μ μ μ₯
- μ€κ°κ°μ νμ μ΅λ νμ topμ μμΉνλλ‘ κ΄λ¦¬
νμ ν¬κΈ°λ₯Ό μ‘°μ νλ©΄μ νμ μ΅λ ν β₯ μ΅μ ν μ μ§
π§Ύ μ½λ ν΄μ€
PriorityQueue<Integer> pq = new PriorityQueue<>(); // μ΅μ ν (μ€λ₯Έμͺ½)
PriorityQueue<Integer> subpq = new PriorityQueue<>(Collections.reverseOrder()); // μ΅λ ν (μΌμͺ½)
int num = Integer.parseInt(br.readLine());
pq.add(num);
// μ½μ
μ§ν, λ νμ΄ μμλ₯Ό μ΄κΈ°λ©΄ swap
if((!pq.isEmpty() && !subpq.isEmpty()) && pq.peek() < subpq.peek()){
pq.add(subpq.remove());
subpq.add(pq.poll());
}
// κ· ν λ§μΆκΈ°
if(pq.size() > subpq.size() + 2)
subpq.add(pq.poll());
else if(pq.size() == subpq.size())
pq.add(subpq.poll());
// νμ κ°μ΄λ°λ μ΅μνμ top
sb.append(pq.peek()).append("\n");
β ν΅μ¬ ν¬μΈνΈ μμ½
ν¬μΈνΈ | μ€λͺ |
μ€κ°κ° μ μ§ | μ΅λ ν + μ΅μ ν μ¬μ© |
μ½μ | μ«μλ₯Ό μ μ ν νμ μΆκ° |
μ λ ¬ | νμ top λΉκ΅ ν κ΅ν |
κ· ν μ μ§ | νμ ν¬κΈ°λ₯Ό μ‘°μ νμ¬ μ€κ°κ°μ΄ μΌμͺ½(μ΅λ ν)μ κ°κΉκ² μ μ§ |
π― κ²°λ‘ : μ€μκ° μ€κ°κ°μ λ νμΌλ‘ ν΄κ²°νμ
μ΄ λ¬Έμ λ λ¨μν μ λ ¬ λ¬Έμ κ° μλ, μ€νΈλ¦¬λ° λ°μ΄ν°μμμ μ€κ°κ° κ΄λ¦¬ λ¬Έμ μ λλ€.
'Algorithm & Data Structures > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
b9328. μ΄μ (0) | 2025.05.21 |
---|---|
b10942. ν λ¦°λ둬? (0) | 2025.05.20 |
b1774. μ°μ£Όμ κ³Όμ κ΅κ° (0) | 2025.05.14 |
b4386. λ³μ리 λ§λ€κΈ° (0) | 2025.05.13 |
b20040. μ¬μ΄ν΄κ²μ (0) | 2025.05.12 |