μλ νμΈμ, μ΄λ² κΈμμλ λ°±μ€ 1417λ² λ¬Έμ μΈ “κ΅νμμ μ κ±°” λ¬Έμ λ₯Ό ν¨κ» ν΄κ²°ν΄ λ³΄κ² μ΅λλ€. μ΄ λ¬Έμ λ λ€μμ΄κ° κ΅νμμμ΄ λκΈ° μν΄ νμν μ΅μ λνμλ₯Ό κ³μ°νλ λ¬Έμ μ λλ€. ν¨κ» λ¬Έμ λ₯Ό λΆμνκ³ , μ κ·Ό λ°©λ²μ μ 리ν ν, μ΅μ’ μ μΈ μ λ΅ μ½λλ₯Ό νμΈν΄ λ³΄κ² μ΅λλ€.
λ¬Έμ URL: https://www.acmicpc.net/problem/1417
1. λ¬Έμ μ€λͺ
1) λ¬Έμ κ°μ
• λ€μμ΄λ κ΅νμμ μ κ±°μ μΆλ§νμ΅λλ€.
• λ€μμ΄ μ΄μΈμ λ€λ₯Έ ν보λ€μ΄ μ‘΄μ¬νλ©°, λ€μμ΄κ° κ°μ₯ λ§μ λνμλ₯Ό κ°μ ΈμΌλ§ λΉμ λ μ μμ΅λλ€.
• λ€λ₯Έ ν보μ λνμ μ€ λ€μμ΄λ³΄λ€ λ§μ λνμλ₯Ό κ°μ§ ν보λ€μ νλ₯Ό λΉΌμλ λ°©μμΌλ‘ λ€μμ΄μ λνμλ₯Ό λλ €μΌ ν©λλ€.
• μ΄λ, λ€μμ΄κ° μ΅μ λͺ νλ₯Ό λ λ°μμΌ νλμ§ κ³μ°νλ λ¬Έμ μ λλ€.
2) μ λ ₯
• 첫 λ²μ§Έ μ€μ ν보μ μ Nμ΄ μ£Όμ΄μ§λλ€. (1 ≤ N ≤ 50)
• λ λ²μ§Έ μ€λΆν° Nκ°μ μ€μ κ° ν보μ λνμκ° μ£Όμ΄μ§λλ€.
• 첫 λ²μ§Έ μ€μ μ£Όμ΄μ§λ λνμλ λ€μμ΄μ λνμμ λλ€.
3) μΆλ ₯
• λ€μμ΄κ° κ°μ₯ λ§μ λνμλ₯Ό κ°μ§κΈ° μν΄ νμν μ΅μ λνμλ₯Ό μΆλ ₯ν©λλ€.
2. μ κ·Όλ²
1) μ λ ₯λ°κΈ°
• sys.stdin.readlineμ μ¬μ©νμ¬ μ λ ₯ μλλ₯Ό λμ λλ€.
• 첫 λ²μ§Έ μ€μμ ν보μ μ Nμ μ λ ₯λ°μ΅λλ€.
• λ λ²μ§Έ μ€μμ λ€μμ΄μ λνμλ₯Ό μ λ ₯λ°κ³ , λλ¨Έμ§ ν보λ€μ λνμλ₯Ό μ°μ μμ νμ μ μ₯ν©λλ€.
2) μ°μ μμ ν μ¬μ©
• λ€λ₯Έ ν보λ€μ λνμλ₯Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νμ¬ κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ ν보μ νλ₯Ό λΉΌμμ΅λλ€.
• μ΄λ₯Ό μν΄ νμ΄μ¬μ PriorityQueueλ₯Ό μ¬μ©νμ¬ μ΅λ νμΌλ‘ ꡬνν©λλ€.
• νμμ κ°μ₯ ν° κ°μ κΊΌλ΄μ΄ λ€μμ΄μ λνμλ₯Ό μ¦κ°μν€κ³ , μλ ν보μ λνμλ₯Ό κ°μμμΌ λ€μ νμ λ£μ΅λλ€.
3) λ€μμ΄μ λνμ λΉκ΅
• λ€μμ΄μ λνμκ° νμ¬ κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ νλ³΄λ³΄λ€ λ§μμ§ λκΉμ§ λ°λ³΅ν©λλ€.
3. μ λ΅ μ½λ
import sys
input = sys.stdin.readline
from queue import PriorityQueue
# μ
λ ₯μΌλ‘λΆν° ν보 μλ₯Ό λ°μμ΄
N = int(input())
# λ€μμ νμ¬ λνμ μ΄κΈ°ν
dasom = 0
# μ°μ μμ ν μμ± (μ΅λ νμΌλ‘ μ¬μ©νκΈ° μν΄ μμλ‘ μ μ₯)
q = PriorityQueue()
# λ€μμ΄ λ½νμΌ νλ ν¬ν νμ μ΄κΈ°ν
ans = 0
# κ° ν보μ λνμλ₯Ό μ
λ ₯λ°μ
for i in range(N):
if i == 0:
# 첫 λ²μ§Έ μ
λ ₯μ λ€μμ λνμ
dasom = int(input())
else:
# λ€λ₯Έ ν보λ€μ λνμλ μ°μ μμ νμ μμλ‘ μ μ₯ (μ΅λ νμ λ§λ€κΈ° μν΄)
q.put(-int(input()))
# N=1μΈ κ²½μ°λ μκΈ° λλ¬Έμ μ°μ μμνμ κ°μ΄ μμλλ§ μν
while q.qsize() > 0:
# νμ¬ κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ ν보μ λνμλ₯Ό κ°μ Έμ΄
# (μμλ‘ μ μ₯νμΌλ―λ‘ λ€μ μμλ‘ λ³ν)
num = abs(q.get())
# λ€μμ λνμκ° νμ¬ κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ νλ³΄λ³΄λ€ λ§μΌλ©΄ μ’
λ£
if dasom > num:
break
else:
# λ€μμ λνμ μ¦κ°, μλ ν보μ λνμ κ°μ
num -= 1
dasom += 1
ans += 1
# λνμκ° κ°μν μλ ν보λ₯Ό λ€μ νμ μ½μ
q.put(-num)
# λ€μμ΄ λ½νκΈ° μν΄ νμν μ΅μ ν¬ν νμλ₯Ό μΆλ ₯
print(ans)
4. μ½λ μ€λͺ
1) μ λ ₯ λ°κΈ°
• 첫 λ²μ§Έ μ€μμ ν보μ μ Nμ μ λ ₯λ°μ΅λλ€.
• λ λ²μ§Έ μ€μμ λ€μμ΄μ λνμλ₯Ό μ λ ₯λ°μ΅λλ€.
• λλ¨Έμ§ ν보λ€μ λνμλ₯Ό μ°μ μμ νμ μμλ‘ μ μ₯ν©λλ€. μ΄λ νμ΄μ¬μ PriorityQueueλ₯Ό μ΅λ νμΌλ‘ μ¬μ©νκΈ° μν¨μ λλ€.
2) μ°μ μμ ν μ¬μ©
• νμμ κ°μ₯ ν° λνμλ₯Ό κ°μ§ ν보μ νλ₯Ό νλ λΉΌμμ λ€μμ΄μ λνμμ λν©λλ€.
• λΉΌμκΈ΄ ν보μ λνμλ νλ κ°μλ μνλ‘ λ€μ νμ μ½μ ν©λλ€.
• μ΄ κ³Όμ μ λ€μμ΄μ λνμκ° κ°μ₯ λ§μμ§ λκΉμ§ λ°λ³΅ν©λλ€.
3) κ²°κ³Ό μΆλ ₯
• λ€μμ΄κ° λ½νκΈ° μν΄ νμν μ΅μ λν νμλ₯Ό μΆλ ₯ν©λλ€.
** μμ **
[μ λ ₯]
3
5
7
7
[κ³Όμ ]
1. λ€μμ μ΄κΈ° λνμ: 5
2. λ€λ₯Έ ν보λ€μ λνμ: [7, 7]
λ°λ³΅ κ³Όμ :
1. κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ ν보(7)μ λνμμμ 1νλ₯Ό λΉΌμκ³ λ€μμκ² μΆκ°:
- λ€μμ λνμ: 6
- ν보λ€μ λνμ: [6, 7]
- μΆκ°λ ν¬ν νμ: 1
2. λ€μ κ°μ₯ λ§μ λνμλ₯Ό κ°μ§ ν보(7)μ λνμμμ 1νλ₯Ό λΉΌμκ³ λ€μμκ² μΆκ°:
- λ€μμ λνμ: 7
- ν보λ€μ λνμ: [6, 6]
- μΆκ°λ ν¬ν νμ: 2
[μΆλ ₯]
2
*******
μκ° λ³΅μ‘λ κ³μ°
1. μ λ ₯ λ°κΈ°: O(N)
2. νμμ κ°μ₯ ν° λνμλ₯Ό κΊΌλ΄κ³ λ€μ λ£κΈ°: O(M log N), μ¬κΈ°μ Mμ λΉΌμμ μ΄ ν¬ν νμ
μ 체 μκ° λ³΅μ‘λλ O(N + M log N)λ‘ λ³Ό μ μμ΅λλ€. μ€μ λ¬Έμ μμλ Mμ΄ Nλ³΄λ€ ν΄ κ°λ₯μ±μ΄ λμΌλ―λ‘ O(M log N)λ‘ κ°μ£Όν μ μμ΅λλ€.
5. GithubμΌλ‘ νμΈ
'π μκ³ λ¦¬μ¦ > BOJ(λ°±μ€)_Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
BOJ(λ°±μ€) 14891[ν±λλ°ν΄] (0) | 2024.07.20 |
---|---|
BOJ(λ°±μ€) 5525[IOIOI] (0) | 2024.07.18 |
BOJ(λ°±μ€) 14503[λ‘λ΄ μ²μκΈ°] (0) | 2024.07.16 |
BOJ(λ°±μ€) 5567[κ²°νΌμ] (0) | 2024.07.12 |
BOJ(λ°±μ€) 14888[μ°μ°μ λΌμλ£κΈ°] (0) | 2024.07.11 |