Tags
- ๋ฌธ์์ด
- greedy
- ๋ฐฑํธ๋ํน
- BOJ
- queue
- ์ ๋ ฌ
- ๊ต์ฌ
- DP
- ๊ทธ๋ํ ํ์
- sort
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- ์๋ฃ๊ตฌ์กฐ
- LV2
- SpringBoot
- BFS
- stack
- ๊ทธ๋ํ ์ด๋ก
- ๊น์ด ์ฐ์ ํ์
- Python
- ์ํ
- PGM
- Brute Force Algorithm
- CodingTest
- ๋๋น ์ฐ์ ํ์
- Dynamic Programming
- Java
- dfs
- ์ ์๋ก
- Study
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1463 : 1๋ก ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ ์ N์ 1๋ก ๋ง๋๋ ๊ฐ์ฅ ์ ์ ์ฐ์ฐ ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ฐ์ฐ์ -1, /3, /2 ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- DP, DFS, BFS ๋ชจ๋ ํ์ด ๊ฐ๋ฅํ๋ค.
๐ธ DP ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// DP
int[] dp = new int[N+1];
dp[1] = 0;
for (int i = 2; i <= N; i++) {
dp[i] = dp[i-1];
if (i % 2 == 0) dp[i] = Math.min(dp[i], dp[i/2]);
if (i % 3 == 0) dp[i] = Math.min(dp[i], dp[i/3]);
dp[i]++;
}
// Output
System.out.print(dp[N]);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- dp[n]์ n์ ๋ง๋๋ ์ต์ ์ฐ์ฐ ํ์์ด๋ค.
- N๊น์ง ๋ฐ๋ณตํ๋ฉฐ ๊ณ์ฐ ๊ฐ์ ๋์ ํด๊ฐ๋ค.
- ์ธ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ค ์ต์๊ฐ + 1 ์ ํ์ฌ ์์น์ ์ ์ฅํ๋ค.
๐ธ DFS ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
private static int MIN = Integer.MAX_VALUE;
private static void dfs(int d, int n) {
if (MIN < d) return;
if (n == 1) {
MIN = Math.min(MIN, d);
return;
}
if (n%3 == 0) dfs(d+1, n/3);
if (n%2 == 0) dfs(d+1, n/2);
dfs(d+1, n-1);
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// DFS
dfs(0, N);
// Output
System.out.print(MIN);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ฌ๊ท ๋ฉ์๋ dfs์์ 3๊ฐ์ง ์ฐ์ฐ์ 1์ ๋๋ฌ ํ ๋ ๊น์ง ์ํํ๋ค.
- ๋๋ฌ ํ์ ๋์ ๊น์ด๋ฅผ MIN์ ์ ์ฅํ๋ค.
- ์ฌ๊ท ๊น์ด๊ฐ MIN๋ณด๋ค ๊น์ด ์ง๋ ๊ฒฝ์ฐ๋ ๋ณผ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฐฑํธ๋ํน์ผ๋ก ์ฌ์ฉํ๋ค.
๐ธ BFS ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
private static class Pair {
int n, d;
public Pair(int n, int d) {
this.n = n;
this.d = d;
}
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// BFS
Queue<Pair> queue = new LinkedList<>();
boolean[] visit = new boolean[N+1];
queue.add(new Pair(N,0));
int cnt = 0;
while (!queue.isEmpty()) {
Pair pair = queue.poll();
if (pair.n == 1) {
cnt = pair.d;
break;
}
if (!visit[pair.n]) {
visit[pair.n] = true;
if (pair.n%3 == 0) queue.add(new Pair(pair.n/3, pair.d+1));
if (pair.n%2 == 0) queue.add(new Pair(pair.n/2, pair.d+1));
queue.add(new Pair(pair.n - 1, pair.d+1));
}
}
// Output
System.out.print(cnt);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- 3๊ฐ์ง ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฃ๋๋ค.
- ์ต์ด๋ก 1์ ๋์ฐฉํ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๊ทธ๋์ ๊น์ด๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์๋ DP ์ฐ์ต์ ์ํ ๋ฌธ์ ์ง๋ง, ์กฐ๊ฑด์ด ๋๋ฌด ํ์ดํธํ์ง ์์์ DFS์ BFS๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋จ, DFS์ ๊ฒฝ์ฐ ๋ฐฑํธ๋ํน์ด ํ์ํ๋ค.
- ๋ฌธ์ ๋ถ์๊ณผ ํ์ด ๊ณํ์ ์ ์ด๊ฐ๋ฉฐ ํ์ดํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_10971 : ์ธํ์ ์ํ 2 (0) | 2023.04.06 |
---|---|
BOJ_1010 : ๋ค๋ฆฌ ๋๊ธฐ (0) | 2023.04.06 |
BOJ_7662 : ์ด์ค ์ฐ์ ์์ ํ (0) | 2023.03.29 |
BOJ_5430 : AC (0) | 2023.03.28 |
BOJ_9019 : DSLR (0) | 2023.03.21 |