티스토리 뷰
문제 링크
https://www.acmicpc.net/problem/1699
1699번: 제곱수의 합
어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다
www.acmicpc.net
자연수 n의 가능한 제곱수의 합은
먼저 1² 을 n번 더하는 경우가 모든 자연수에 적용가능합니다.
다음은 n보다 작은 제곱수(1², 2², 3² ...) 중 n - 제곱수번째의 합 + 1이 될 수 있습니다.
n을 10으로 예를들면 1²을 10번 더하는 방법이 있습니다.
10보다 작은 제곱수는 1², 2², 3²으로 총 3가지가 있습니다.
1. 10 - 1² = 9번째의 값은 3² 이므로 1² 하나만 더해주는 방법이 가능합니다.
2. 10 - 2² = 6번째의 값은 2²+1² 이므로 2² 하나만 더해주는 방법이 가능합니다.
3. 10 - 3² = 1번째의 값은 1² 이므로 3² 하나만 더해주는 방법이 가능합니다.
이렇게 구한 값들 중 최소값을 구해주면 됩니다.
구현 코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <algorithm> | |
using namespace std; | |
int dp[100001]; | |
int main(){ | |
int n; | |
cin >> n; | |
for(int i=1;i<=n;i++){ | |
dp[i] = i; | |
for(int j=1;j*j<=i;j++){ | |
dp[i] = min(dp[i], dp[i-j*j]+1); | |
} | |
} | |
cout << dp[n] << endl; | |
return 0; | |
} |
'Coding Test > 백준' 카테고리의 다른 글
[C++] 백준 9461 - 파도반 수열 (0) | 2020.08.12 |
---|---|
[C++] 백준 2133 - 타일 채우기 (0) | 2020.08.11 |
[C++] 백준 2579 - 계단 오르기 (0) | 2020.08.08 |
[C++] 백준 1912 - 연속 합 (0) | 2020.08.07 |
[C++] 백준 11054 - 가장 긴 바이토닉 부분 수열 (0) | 2020.08.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++
- 배열과 문자열
- 코딩인터뷰 완전분석
- 완전탐색
- import
- 종만북
- HDFS
- 합친 lis
- 두니발 박사의 탈옥
- python
- Hadoop
- 외발 뛰기
- Django
- 2225
- Jaeha's Safe
- 하둡
- 분할정복
- 출전 순서 정하기
- 스파크
- HiveQL
- 알고스팟
- Sqoop
- 하이브
- hive
- microwaving lunch boxes
- 삼각형 위의 최대 경로 수 세기
- 팰린드롬 구하기
- 삼각형 위의 최대 경로
- 백준
- pyspark
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함