[파이썬] 백준 BOJ 17626번 Four Squares

강준호·2023년 6월 28일
0

https://www.acmicpc.net/problem/17626

생각보다 이해가 좀 어려웠다ㅜ

코드

n = int(input())
dp = [0] + [float('inf')]*n 
for i in range(1, n+1):
    j = 1
    while j*j <= i:
        dp[i] = min(dp[i], dp[i - j*j] + 1)
        j += 1
print(dp[n])

dp = [0] + [float('inf')]*n

  • 무한대인 최대값으로 두고 min()을 하는게 좋음.

while j*j <= i

  • 이는 'i'보다 작거나 같은 제곱수만 고려하도록 하기 위한 것.

dp[i] = min(dp[i], dp[i - j*j] + 1)

예를들면

  • square = 1(1^2)의 경우 dp[26] = min(dp[26], 1 + dp[26 - 1])을 수행합니다.
  • square = 4(2^2)의 경우 dp[26] = min(dp[26], 1 + dp[26 - 4])가 됩니다.
  • square = 9(3^2)의 경우 dp[26] = min(dp[26], 1 + dp[26 - 9])을 수행합니다.

이렇게 자신보다 작은 값의 제곱수를 돌려보는것.

0개의 댓글