문제
1699번: 제곱수의 합
어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다
www.acmicpc.net
알고리즘
- 각 자연수를 만드는 제곱수에 최대 항의 개수를 dp에 저장한다.
- 이중 반복문을 통해 각 자연수를 만드는 제곱수에 항의 개수를 구한다.
- 각 자연수가 제곱수보다 작다면 제곱수로 항의 개수를 만들지 못하므로 반복을 멈춘다.
- 각 자연수를 만다는 제곱수에 최소 항의 개수를 구한다.
코드
pypy3 해결
# pypy3 (통과)
# python3 (시간초과)
import sys
n = int(sys.stdin.readline())
dp = [x for x in range(100001)] # 각 자연수를 만드는 제곱수에 최대 항의 개수
# 반복문을 통해 각 자연수를 확인
for i in range(1, n + 1):
# 반복문을 통해 각 자연수를 만드는 제곱수에 항의 개수를 구한다.
for j in range(1, i):
# 각 자연수가 제곱수보다 작다면 제곱수로 항의 개수를 만들지 못하므로 반복을 멈춘다.
if i < j * j:
break
# 각 자연수를 만드는 제곱수에 최소 항의 개수를 구한다.
dp[i] = min(dp[i], dp[i - j * j] + 1)
print(dp[n])
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 11055번(파이썬): 가장 큰 증가 부분 수열 (0) | 2021.12.13 |
---|---|
[baekjoon] 백준 2293번(파이썬): 동전 1 (0) | 2021.12.12 |
[baekjoon] 백준 9655번(파이썬): 돌 게임 (0) | 2021.12.08 |
[baekjoon] 백준 9625번(파이썬): BABBA (0) | 2021.12.07 |
[baekjoon] 백준 11057번(파이썬): 오른막 수 (0) | 2021.12.06 |