MUKER_DEV with iOS

[swift] λ°±μ€€ - 17626번: Four Squares λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 17626번: Four Squares

MUKER 2023. 4. 12. 23:54
 

17626번: Four Squares

λΌκ·Έλž‘μ£ΌλŠ” 1770년에 λͺ¨λ“  μžμ—°μˆ˜λŠ” λ„· ν˜Ήμ€ κ·Έ μ΄ν•˜μ˜ 제곱수의 ν•©μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλ‹€κ³  증λͺ…ν•˜μ˜€λ‹€. μ–΄λ–€ μžμ—°μˆ˜λŠ” 볡수의 λ°©λ²•μœΌλ‘œ ν‘œν˜„λœλ‹€. 예λ₯Ό λ“€λ©΄, 26은 52κ³Ό 12의 합이닀; λ˜ν•œ 42 + 32 + 1

www.acmicpc.net


λ‚˜μ˜ 풀이

let n = Int(readLine()!)!
var dp = [Int](repeating: 5, count: n+1)
dp[0] = 0
for i in 1...n {
    var j = 1
    while j * j <= i {
        dp[i] = min(dp[i], dp[i - j * j] + 1)
        j += 1
    }
}
print(dp[n])

풀이 ν‚€μ›Œλ“œ

DP
브루트포슀 μ•Œκ³ λ¦¬μ¦˜
dp배열에 제곱수의 개수λ₯Ό μ €μž₯ν•΄κ°€λ©° 닡을 κ΅¬ν•œλ‹€.
dp[i - j * j] + 1이 문제의 핡심 ν‚€μ›Œλ“œ

μ˜ˆμ‹œ)

μž…λ ₯: 10
10보닀 μž‘μ€ 제곱수λ₯Ό κ΅¬ν•œλ‹€
j = 1 일 λ•Œ 1*1 == 1
dp[10 - 1] == dp[9]일 λ•Œ 의 제곱수의 κ°œμˆ˜μ—μ„œ +1을 ν•΄ dp[10]에 λ„£λŠ”λ‹€.
+1을 ν•˜λŠ” μ΄μœ λŠ” 1의 μ œκ³±μ„ λ”ν•΄μ€˜ μ œκ³±μˆ˜κ°€ ν•˜λ‚˜ 늘기 λ•Œλ¬Έμ΄λ‹€.
j = 2 일 λ•Œ 2*2 == 4
dp[10 - 4] == dp [6]일 λ•Œ 의 제곱수의 개수 +1이 ν˜„μž¬ dp[10]κ³Ό 비ꡐ해 μž‘μ€ 수λ₯Ό dp[10]에 λ„£λŠ”λ‹€.
j = 3 일 λ•Œ 3*3 == 9
dp[10 - 9] == dp [1]일 λ•Œ 의 제곱수의 개수 +1이 ν˜„μž¬ dp[10]κ³Ό 비ꡐ해 μž‘μ€ 수λ₯Ό dp[10]에 λ„£λŠ”λ‹€.

좜λ ₯: 2