티스토리 뷰
제곱수의 합
문제
숫자 N을 제곱수의 합으로 표현하고자 할 때, 사용해야 하는 제곱 수의 최소 개수를 출력하는 프로그램을 작성하시오. 예를 들어, 숫자 45를 제곱수의 합으로 표현하고자 할 때 필요한 제곱 수의 최소 개수는 2개이며, 이는 다음과 같다.
45 = 3^2 + 6^2
입력
첫 번째 줄에 N이 주어진다. ( 1 ≤ N ≤ 100,000 )
출력
필요한 제곱 수의 최소 개수를 출력한다.
예제 입력
45
예제 출력
2
예제 입력
38
예제 출력
3
코드
///제곱수의 합 // greedy 하게 찾고 , 다시 찾기, 100점
import java.util.*;
public class Main {
public static ArrayList<Integer> box = new ArrayList<>();
public static int result = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int b[];
int c[];
int d[];
int count = 0;
long max = Integer.MIN_VALUE;
a = sc.nextInt();
int sqrt = (int)Math.sqrt(a);
int tmpSqrt = sqrt;
b = new int[(sqrt*sqrt)+1];
int find = a;
while (find > 0) {
if(tmpSqrt*tmpSqrt <= find) {find -= tmpSqrt*tmpSqrt; result++; b[tmpSqrt*tmpSqrt] = 1; }
else tmpSqrt = tmpSqrt- 1;
}
findR(a,sqrt,0);
System.out.println(result);
sc.close();
}
public static void findR(int a, int sqrt, int c){
if(a < 0 || c >= result || sqrt ==0 ) return;
if(a==0) { result = c; return; }
findR(a-(sqrt*sqrt),sqrt,c+1);
findR(a-(sqrt*sqrt),sqrt-1,c+1);
findR(a,sqrt-1,c);
}
}
다이나믹 프로그래밍 (but 오히려 시간 초과 걸림)
//dynamic programming
import java.util.*;
public class Main {
public static ArrayList<Integer> box = new ArrayList<>();
//첫째 줄에 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int[] dp;
a = sc.nextInt();
dp = new int[a + 1];
for (int i = 1; i * i <= a; i++) {
dp[i * i] = 1;
}
for (int i = 1; i <= a; i++) {
if (dp[i] == 1) ;
else if (dp[i - 1] == 1) dp[i] = 2;
else {
dp[i] = dp[i - 1] + 1;
for (int j = i - 1; j >= i/2; j--) {
if (dp[j] + dp[i - j] < dp[i]) dp[i] = dp[j] + dp[i - j];
}
}
}
System.out.println(dp[a]);
}
}
'알고리즘 문제 풀이 ' 카테고리의 다른 글
최단거리 (0) | 2018.10.22 |
---|---|
팀 나누기 (0) | 2018.10.22 |
연속부분의 최대 합 (0) | 2018.10.11 |
자원채취 (0) | 2018.10.11 |
직사각형 배치의 경우의 수 (0) | 2018.10.10 |
구슬게임 (0) | 2018.10.05 |
직사각형의 합 (0) | 2018.10.05 |
구간의 합집합 (0) | 2018.10.05 |
- Total
- Today
- Yesterday
- Terminal
- webspider
- 백준 #알고리즘 #전깃줄 #NodeJs #javascript
- 백준 #java #알고리즘
- java #오르막수 #백준 #알고리즘
- 백준
- java #알고리즘 #백준 #퇴사
- Game
- 1992번
- java #알고리즘 #백준
- TypeScript
- 한글 자동 완성
- 색종이자르기
- 쿼드트리
- 2630번
- java #퀵소트 #quicksort #알고리즘 #백준
- 중간거리 #야만나 #약속장소추천 #중간위치 #웹 #리액트 #React #reactjs #kakao지도 #kakaoapi
- javascript #백준 #회의실배정 #알고리즘
- react
- javascript #백준 #알고리즘 #LCS
- Javascript
- java #하노이 #알고리즘 #백준
- java #알고리즘 #백준 #패션왕신해빈
- npm
- java #알고리즘 #백준 #N과M #백트래킹
- webpack
- 알고리즘
- java #백준 #알고리즘 #로또 #6603
- java #백준 #알고리즘 #2805 #나무자르기
- javascript #연속합 #알고리즘 #백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |