Python으로 구현한 1699번 제곱수의 합 문제 풀이입니다.
https://www.acmicpc.net/problem/1699
import sys
input = sys.stdin.readline
n = int(input())
dp = [i for i in range(n + 1)]
for i in range(1, n + 1) :
for j in range(1, i) :
if j**2 > i :
break
if dp[i] > dp[i-j**2] + 1 :
dp[i] = dp[i-j**2] + 1
print(dp[n])
1. 0부터 n + 1까지 각 인덱스 값을 초기화한 dp 리스트를 정의한다.
2. 2중 for문을 통해 1번째 요소부터 특정 기준값 전까지의 값을 확인하여 이전값의 제곱(j**2) 수가 기준값(i)보다 클 경우 break한다.
3. 1을 제외하고 작은수부터 제곱한 수를 기준값과 비교하여 하나라도 있으면 그 제곱수 값 + 1을 할당한다.
4. 반복문이 모두 종료되면 최종적으로 dp리스트의 n번째 요소를 출력한다.
'백준(Python) 풀이 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준(Python) 9461번 파도반 수열 풀이 (0) | 2022.03.03 |
---|---|
백준(Python) 2133번 타일 채우기 풀이 (0) | 2022.03.03 |
백준(Python) 2579번 계단 오르기 풀이 (0) | 2022.03.02 |
백준(Python) 1912번 연속합 풀이 (0) | 2022.03.02 |
백준(Python) 11054번 가장 긴 바이토닉 부분 수열 풀이 (0) | 2022.03.02 |