λ¬Έμ
μ΄λ€ μμ°μ Nμ κ·Έλ³΄λ€ μκ±°λ κ°μ μ κ³±μλ€μ ν©μΌλ‘ λνλΌ μ μλ€. μλ₯Ό λ€μ΄ 11=32+12+12(3κ° ν)μ΄λ€. μ΄λ° ννλ°©λ²μ μ¬λ¬ κ°μ§κ° λ μ μλλ°, 11μ κ²½μ° 11=22+22+12+12+12(5κ° ν)λ κ°λ₯νλ€. μ΄ κ²½μ°, μνμ μν¬λΌν μ€λ “11μ 3κ° νμ μ κ³±μ ν©μΌλ‘ ννν μ μλ€.”λΌκ³ λ§νλ€. λν 11μ κ·Έλ³΄λ€ μ μ νμ μ κ³±μ ν©μΌλ‘ ννν μ μμΌλ―λ‘, 11μ κ·Έ ν©μΌλ‘μ¨ ννν μ μλ μ κ³±μ νμ μ΅μ κ°μλ 3μ΄λ€.
μ£Όμ΄μ§ μμ°μ Nμ μ΄λ κ² μ κ³±μλ€μ ν©μΌλ‘ ννν λμ κ·Έ νμ μ΅μκ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ°μ Nμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 100,000)
μΆλ ₯
μ£Όμ΄μ§ μμ°μλ₯Ό μ κ³±μμ ν©μΌλ‘ λνλΌ λμ κ·Έ μ κ³±μ νμ μ΅μ κ°μλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
7
μμ μΆλ ₯ 1 볡μ¬
4
μμ μ λ ₯ 2 볡μ¬
1
μμ μΆλ ₯ 2 볡μ¬
1
μμ μ λ ₯ 3 볡μ¬
4
μμ μΆλ ₯ 3 볡μ¬
1
μμ μ λ ₯ 4 볡μ¬
11
μμ μΆλ ₯ 4 볡μ¬
3
μμ μ λ ₯ 5 볡μ¬
13
μμ μΆλ ₯ 5 볡μ¬
2
# νμ΄ λ°©λ²
μΌλ¨ Nμ΄λΌλ μ«μλ³΄λ€ μμ μ κ³±μλ₯Ό λ΄μ 리μ€νΈλ₯Ό μ μν΄μΌ νλ€.
κ·Έλ¦¬κ³ 1~NκΉμ§μ μλ₯Ό λλ©΄μ DP리μ€νΈλ₯Ό νλμ© μ±μλκ°λ€.
κ°μ₯ μ΅μ μ κ²½μ°λ λ€ 1λ‘ μ΄λ£¨μ΄μ Έ μλ κ²½μ°λκΉ d[i] = iλ‘ μ μνκ³
μ΅μκ°μ μ°Ύλ λ°©μμΌλ‘ μ½λλ₯Ό μ§°λ€
# μ½λ
# 2025-04-19 13:55-14:25
import sys
sys.stdin = open("input.txt","r")
N = int(sys.stdin.readline().strip())
square = [i*i for i in range(1,int(N**0.5)+1)]
d = [0] * (N+1)
for i in range(1, N+1):
d[i] = i
for s in square:
if s > i: break
d[i] = min(d[i], d[i-s]+1)
print(d[N])
# μ°Έκ³ (μ€λ₯ ν΄κ²°)
d[i] μ μλ₯Ό μλͺ»νλ€ d[s] + d[i-s]κ° μλλ°
# 2025-04-19 13:55-14:25
import sys
# sys.stdin = open("input.txt","r")
N = int(sys.stdin.readline().strip())
square = [i*i for i in range(1,int(N**0.5)+1)]
d = [0] * (N+1)
for i in range(1, N+1):
if i in square:
d[i] = 1
else:
for s in square:
if s > i: break
d[i] = min(d[i-1]+1, d[s]+d[i-s])
print(d[N])
'π Study > Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Gold IV] 14502 - μ°κ΅¬μ (0) | 2025.04.25 |
---|---|
[Gold V] 15486 - ν΄μ¬2 (0) | 2025.04.20 |
[Silver I] 1389 - μΌλΉ λ² μ΄μ»¨μ 6λ¨κ³ λ²μΉ (0) | 2025.04.19 |
[Silver III] 2606 - λ°μ΄λ¬μ€ (0) | 2025.04.19 |
[Gold V] 7576 - ν λ§ν (0) | 2025.04.19 |