[BaekJoon] 1699 : 제곱수의 합
🔦 문제 링크
✍️ 풀이
하향식 접근으로 문제를 풀이했다.
n이라는 값의 최소 갯수를 구하기 위해선 n보다 작은 수의 최소 갯수가 필요하다.
n에서 제곱수 값을 빼면 (n - 제곱수 값)이며 이는 (n - 제곱수 값)의 최소갯수에 +1 한 값이 n의 최소갯수가 될 수도 있다는 것을 의미한다.
그러니까, 1부터 n까지 차례대로 가질 수 있는 최솟값을 구해가면서 dp[n]을 구하도록 한다.
🛠 코드
n = int(input())
dp = [0] * (n + 1)
for i in range(1, n + 1):
dp[i] = i
for j in range(1, int(math.sqrt(i)) + 1):
dp[i] = min(dp[i], dp[i - j * j] + 1)
print(dp[n])
📝 정리
🎈 참고
Author And Source
이 문제에 관하여([BaekJoon] 1699 : 제곱수의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pyh8618/BaekJoon-1699-제곱수의-합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)