๐Algorithm/๐ฅBaekjoon
[Baekjoon] 1699_์ ๊ณฑ์์ ํฉ
๋ฟ์ผ._.
2026. 2. 9. 12:30
๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1699)
< ์ ๊ณฑ์์ ํฉ >
๋ฌธ์ ํ์ด
์๋ฅผ ๋ค์ด 5๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ 2*2 + 1๋ก ๊ตฌํ ์ ์์ผ๋ฏ๋ก
์ ํ์์ dp[i] = Math.min(dp[i], 1 + dp[i - (j*j)])๊ฐ ๋๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _1699_ { // ์ ๊ณฑ์์ ํฉ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int dp[] = new int[n + 1];
for (int i = 1; i < n + 1; i++) {
dp[i] = i;
for (int j = 1; j * j <= i; j++) {
dp[i] = Math.min(dp[i], 1 + dp[i - (j * j)]);
}
}
System.out.println(dp[n]);
}
}
๋ณ์)
n : ์ฃผ์ด์ง ์์ฐ์
dp : ์ ๊ณฑ์ ํญ์ ์ต์ ๊ฐ์
์์ฐ์ n์ ์ ๋ ฅ๋ฐ๋๋ค. 1๋ถํฐ n๊น์ง ์ดํด๋ณด๋ฉฐ ์ด๊ธฐ๊ฐ์ i๋ก ์ค์ ํ๋ค. ๊ทธ ์ด์ ๋ ์ต๋ (1*1)๋ก i๋ฒ ๋ํ๋ฉด i๊ฐ์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ค์ 1๋ถํฐ (j*j)๊ฐ i ์ดํ์ผ ๋๊น์ง ์ดํด๋ณด๋ฉฐ dp[i]์ 1+dp[i-(j*j)] ์ค ์ต์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
์ต์ข dp[n]์ ์ถ๋ ฅํ๋ค.
