๋ฌธ์
https://www.acmicpc.net/problem/1699
1699๋ฒ: ์ ๊ณฑ์์ ํฉ
์ด๋ค ์์ฐ์ N์ ๊ทธ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ณฑ์๋ค์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ์๋ฅผ ๋ค์ด 11=32+12+12(3๊ฐ ํญ)์ด๋ค. ์ด๋ฐ ํํ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ๋ ์ ์๋๋ฐ, 11์ ๊ฒฝ์ฐ 11=22+22+12+12+12(5๊ฐ ํญ)๋ ๊ฐ๋ฅํ๋ค
www.acmicpc.net
ํ์ด
์ฒ์์๋ ํฐ ์ ๊ณฑ์ ๋นผ์ฃผ๊ณ ๊ฐ์๋ฅผ ๊ตฌํ๋ ์์ผ๋ก ์งฐ๋ค.
(์ด๋ ๊ฒ ํ๋ฉด ๋ ์ค ,,, )
์๋ฅผ ๋ค์ด 41 = 16 + 25๋ก 2 ๊ฐ ๋์ฌ ์๋ ์๊ณ , 36 + 4 + 1๋ก 3 ์ด ๋์ฌ ์๋ ์๋ค.
ํ์ง๋ง ๋ด๊ฐ ์ง ๊ฑด ํฐ ์ ๊ณฑ์ ๋นผ์ฃผ๊ณ ๊ฐ์๋ฅผ ์ธ๋ ์์ผ๋ก ์งฐ๊ธฐ ๋๋ฌธ์ 36 + 4 + 1๋ก 3์ด ๋ฐํ๋์ด ํ๋ฆฐ ๋ก์ง์ด ๋์๋ค.
๊ทธ๋์ ๋ฐฐ์ด์ ํ๋ ์ ์ธํด์ ์ฌ๋ฌ ๊ฒฝ์ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฃ์ด์ ๋ค์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 2^2 = 1
arr[5] = arr[4] + arr[1] = 1 + 1 = 2
arr[6] = arr[4] + arr[2] = 1 + 2 = 3
arr[7] = arr[4] + arr[3] = 1 + 3 = 4
arr[8] = arr[4] + arr[4] = 1 + 1 = 2
arr[9] = 3^2 = 1
arr[10] = arr[9] + arr[1] = 1 + 1 = 2
arr[6] + arr[4] = 3 + 1 = 4
์์ฒ๋ผ arr[10] ์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ด ๊ตฌํด์ง ๊ฒฝ์ฐ Math.min()์ ํตํด ์ต์๊ฐ์ ๊ตฌํ๋ ๋ก์ง์ ๋ง๋ค์ด์คฌ๋ค.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static int[] arr = new int[100001];
/**
* ์ต์ ๊ฐ์ ๊ตฌํ๊ธฐ
*
* @param x
*/
public static void square(int x) {
int num = (int) Math.sqrt(x);
int min = 10001;
// ์ ๊ณฑ๊ทผ์ด๋ผ๋ฉด 1๊ฐ
if (num * num == x) {
arr[x] = 1;
} else if (num >= 2) {
for (int i = 2; i <= num; i++) {
int number = x - i * i;
if (arr[number] == 0) {
square(number);
}
if (arr[x - number] == 0) {
square(x - number);
}
min = Math.min((arr[number] + arr[x - number]), min);
}
arr[x] = min;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
// 1, 2, 3์ ํ ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฐ์ ์์ผ๋ฏ๋ก ์ด๊ธฐ๊ฐ ์ค์
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
square(num);
bw.write(String.valueOf(arr[num]));
bw.flush();
bw.close();
}
}
์ ๋ต
'๐ฐ๐๐๐๐๐๐๐๐ > ๐ฑ๐๐๐๐๐๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Java] ๊ฒ์์ ๋ง๋ ๋์ค์ด 2847 (0) | 2023.12.02 |
---|---|
[๋ฐฑ์ค/Java] 1๋ก ๋ง๋ค๊ธฐ 1463 (0) | 2023.12.01 |
[๋ฐฑ์ค/Java] ๋ํค๋ํค ๊ฐ์๋๋ฆฌ๋ฏธ 12789 (0) | 2023.11.28 |
[๋ฐฑ์ค/Java] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 3 16935 (1) | 2023.11.27 |
[๋ฐฑ์ค/Java] ๋ก๋ด ์๋ฎฌ๋ ์ด์ 2174 (1) | 2023.11.26 |