📖 문제
17626번: Four Squares
라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1
www.acmicpc.net
💡 풀이 방식
• DP
규칙을 찾아 점화식을 채운다.
1 : 1^2 ⇒ 1개
2 : 1^2 + 1^2 ⇒ 2개
3 : 1^2 + 1^2 + 1^2 ⇒ 3개
4 : 2^2 ⇒ 1개
5 : 2^2 + 1^2 ⇒ 2개
6 : 2^2 + 1^2 + 1^2 ⇒ 3개
7 : 2^2 + 1^2 + 1^2 + 1^2 ⇒ 4개
8 : 2^2 + 2^2 ⇒ 2개
9 : 3^2 ⇒ 1개
규칙은
제곱수가 갱신될 때까지는 이전 dp 값에서 +1을 해 주는 것
그러면 아래와 같은 점화식을 세울 수 있다.
dp[i] = Math.min(dp[i], dp[i - j * j] + 1)
i의 범위는 2부터 N까지,
j의 범위는 i부터 j의 제곱근까지이며
완전탐색을 통해 i보다 작은 제곱수에서 뺀 dp[i - j * j] 中 최솟값 + 1해 배열을 채우면 된다.
🔺 코드
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
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N + 1];
// dp 배열 초기화
Arrays.fill(dp, Integer.MAX_VALUE);
dp[0] = 0; // dp[0]이 꼭 0이어야 함
dp[1] = 1;
for(int i = 2 ; i <= N ; i++) {
for(int j = 1 ; j * j <= i ; j++) {
dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
}
}
System.out.println(dp[N]);
}
}
|
cs |
💦 어려웠던 점
처음에 제곱인 경우는 먼저 처리하고, dp 식을 세웠었는데 잘못된 식을 작성해서 자꾸 틀렸다,,
패턴 찾는 게 참 어렵당,ㅠ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240528 | 240630 |
(참고)
[백준] 17626번 : Four Squares – JAVA [자바]
https://www.acmicpc.net/problem/17626 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다.
propercoding.tistory.com
[백준 17626번 / Java] Four Squares - DP
문제 링크 Silver 3 https://www.acmicpc.net/problem/17626 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법
mag1c.tistory.com
[BOJ] 백준 17626번 Four Squares (Java)
#17626 Four Squares 난이도 : 실버 5 유형 : DP / 브루트포스 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수
loosie.tistory.com
[BOJ] 백준 17626번 : Four Squares (JAVA)
문제의 링크 : https://www.acmicpc.net/problem/17626 17626번: Four Squares 문제 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방
steady-coding.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 2167번: 2차원 배열의 합 (1) | 2024.01.25 |
---|---|
[백준/JAVA] 9465번: 스티커 (0) | 2024.01.20 |
[백준/JAVA] 20164번: 홀수 홀릭 호석 (0) | 2024.01.14 |
[백준/JAVA] 10994번: 별 찍기 - 19 (0) | 2024.01.13 |
[백준/JAVA] 17276번: 배열 돌리기 (0) | 2024.01.12 |