-
[Java] BOJ 1699 제곱수의 합개발자 취업/코딩테스트 준비 2023. 7. 28. 16:08반응형
1699번: 제곱수의 합
어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다
www.acmicpc.net
반례
753 # Answer 3 (625 + 64 + 64 = 753)
정답 코드
- 제곱수는 1로 설정하기
- 구하는 수는 범위내 dp[N-제곱수] + 1 중 가장 작은 값
import java.io.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] dp = new int[N + 1]; dp[1] = 1; for (int i = 2; i <= N; i++) { if (isPow(i)) { dp[i] = 1; } else { dp[i] = getMin(dp, i); } } System.out.println(dp[N]); } private static int getMin(int[] dp, int index) { int min = Integer.MAX_VALUE; for (int i = 1; i * i <= index; i++) { min = Math.min(min, dp[index - i * i] + 1); } return min; } private static boolean isPow(int i) { return i % Math.sqrt(i) == 0 && (double) i / (double) Math.sqrt(i) == Math.sqrt(i); } }
'개발자 취업 > 코딩테스트 준비' 카테고리의 다른 글
[Java] BOJ 4929 수열 걷기 (0) 2023.07.28 [토스 NEXT] 2022년 코딩테스트 Server 기출문제 풀기 (0) 2023.07.04 [Java] BOJ 11561 징검다리 (0) 2023.07.02 [Java] BOJ 11048 이동하기 (1) 2023.06.18 [Java] BOJ 27964 콰트로치즈피자 (0) 2023.06.14