Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- Flutter
- 스위프트
- kotlin
- 백준
- 머신러닝
- 알고리즘
- 프로그래머스
- VSCode
- programers
- 아마존 웹 서비스
- softeer
- baekjoon
- 코틀린
- GDSC
- java
- aws
- 자바
- SWIFT
- 플러터
- 다트
- Python
- Android
- 현대sw
- 소프티어
- 개발
- 안드로이드
- 코테
- MVVM
- DART
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 1699번(파이썬): 제곱수의 합 본문
문제
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 |