
๐ ๋ฌธ์ ๋ณด๊ธฐ - [๋ฐฑ์ค] Four Squares
๋ผ๊ทธ๋์ฃผ๋ 1770๋ ์ ๋ชจ๋ ์์ฐ์๋ ๋ท ํน์ ๊ทธ ์ดํ์ ์ ๊ณฑ์์ ํฉ์ผ๋ก ํํํ ์ ์๋ค๊ณ ์ฆ๋ช ํ์๋ค. ์ด๋ค ์์ฐ์๋ ๋ณต์์ ๋ฐฉ๋ฒ์ผ๋ก ํํ๋๋ค. ์๋ฅผ ๋ค๋ฉด, 26์ 52๊ณผ 12์ ํฉ์ด๋ค; ๋ํ 42ย + 32ย + 12์ผ๋ก ํํํ ์๋ ์๋ค. ์ญ์ฌ์ ์ผ๋ก ์์ฐ์ ๋ช ์๋ค์๊ฒ ๊ณตํต์ ์ผ๋ก ์ฃผ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ์์ฐ์๋ฅผ ๋ท ํน์ ๊ทธ ์ดํ์ ์ ๊ณฑ์ ํฉ์ผ๋ก ๋ํ๋ด๋ผ๋ ๊ฒ์ด์๋ค. 1900๋ ๋ ์ด๋ฐ์ ํ ์์ฐ๊ฐ๊ฐ 15663 = 1252ย + 62ย + 12ย + 12๋ผ๋ ํด๋ฅผ ๊ตฌํ๋๋ฐ 8์ด๊ฐ ๊ฑธ๋ ธ๋ค๋ ๋ณด๊ณ ๊ฐ ์๋ค. ์ข ๋ ์ด๋ ค์ด ๋ฌธ์ ์ ๋ํด์๋ 56์ด๊ฐ ๊ฑธ๋ ธ๋ค: 11339 = 1052ย + 152ย + 82ย + 52.
์์ฐ์ย n์ด ์ฃผ์ด์ง ๋,ย n์ ์ต์ ๊ฐ์์ ์ ๊ณฑ์ ํฉ์ผ๋ก ํํํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ์ ํ์ค์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ ์์ฐ์ย n์ ํฌํจํ๋ ํ ์ค๋ก ๊ตฌ์ฑ๋๋ค. ์ฌ๊ธฐ์, 1 โคย nย โค 50,000์ด๋ค.
์ถ๋ ฅ์ ํ์ค์ถ๋ ฅ์ ์ฌ์ฉํ๋ค. ํฉ์ดย n๊ณผ ๊ฐ๊ฒ ๋๋ ์ ๊ณฑ์๋ค์ ์ต์ ๊ฐ์๋ฅผ ํ ์ค์ ์ถ๋ ฅํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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];
Arrays.fill(dp, 4);
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]);
}
}
ํด๋น ๋ฌธ์ ๋ DP๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋๋ฐ ์ ํ์์ด ์ ๋ ์ค๋ฅด์ง ์์์ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค.
์ฒซ๋ฒ์งธ๋ก ์ฐ์ ๋ฐฐ์ด ์ ์ฒด ๊ฐ์ ์ต๋ ๊ฐ์ธ 4๋ก ์
๋ ฅํด๋ก๋๋ค.
์ดํ ์ ํ์์ ํ์
ํ๊ธฐ ์ํด 1๋ถํฐ ์๋์ฒ๋ผ ์ฐจ๋ก๋๋ก ์
๋ ฅํด๋ดค์ต๋๋ค.
1 =
2 =
3 =
4 =
5 =
6 =
7 =
8 =
9 =
10 =
11 =
12 =
13 =
์์ ๊ฐ์ ํ์์ผ๋ก ๋ฐ๋ณต๋๋๋ฐ ํจํด์ด ์์ ๋ฅผ ๋ํด์ฃผ๋ฉด ๊ฐ์ด ๋์ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๊ณฑ์ธ ๋ 1, 4, 9 ์ผ ๋์ ๊ฐ์ด 1๊ฐ์ด๋ฏ๋ก ์ ํด์ฃผ๋ฉด ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์์ต๋๋ค.