반응형
문제
https://www.acmicpc.net/problem/17626
풀이
DP로 풀이할 수 있는 문제
f(1)=12 이고, f(2)=12+12로 나타낼 수 있다.
최대 갯수는 f(n)=f(n−1)+1으로 볼 수 있다.
f(4)=22 같은 경우에는 22를 어떻게 도출할 수 있을지 생각해보자.
이렇게 생각해보면 되지 않을까?
4는 22 이므로, f(4)=f(4−22)+1
n이 어떤 수의 제곱보다 크거나 같다면 n에서 해당수를 뺀 값에서 +1만큼 경우의 수를 더해주어 n을 만들 수 있다.
f(n)=min(f(n−1)+1,f(n−i∗i)+1
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let n = Int(readLine()!)! | |
var dp = [Int](repeating: 0, count: 50_001) | |
dp[1] = 1 | |
for i in 2...50000 { | |
dp[i] = dp[i - 1] + 1 | |
var j = 1 | |
while i - j * j >= 0 { | |
dp[i] = min(dp[i], dp[i - j * j] + 1) | |
j += 1 | |
} | |
} | |
print(dp[n]) |
후기
기본적인 DP 문제
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 21736 헌내기는 친구가 필요해 (Swift) (0) | 2025.01.20 |
---|---|
[BOJ] 백준 18111 마인크래프트 (Swift) (0) | 2025.01.20 |
[BOJ] 백준 11727 2xn 타일링 2 (Swift) (0) | 2025.01.17 |
[BOJ] 백준 9375 패션왕 신해빈 (Swift) (0) | 2025.01.16 |
[BOJ] 백준 1074 Z (Swift) (0) | 2025.01.15 |