๋ฌธ์ (์ถ์ฒ: 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]์ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 19621_ํ์์ค ๋ฐฐ์ 2 (0) | 2026.02.11 |
|---|---|
| [Baekjoon] 5953_Profits (0) | 2026.02.10 |
| [Baekjoon] 4097_์์ต (0) | 2026.01.30 |
| [Baekjoon] 18353_๋ณ์ฌ ๋ฐฐ์นํ๊ธฐ (0) | 2026.01.29 |
| [Baekjoon] 14501_ํด์ฌ (0) | 2026.01.27 |