Tags
- PGM
- Java
- SpringBoot
- Study
- Dynamic Programming
- ๊ทธ๋ํ ํ์
- ์ ์๋ก
- Python
- ์ ๋ ฌ
- ๊ต์ฌ
- ์๋ฎฌ๋ ์ด์
- dfs
- LV2
- ์ํ
- ๊น์ด ์ฐ์ ํ์
- BOJ
- greedy
- sort
- Brute Force Algorithm
- CodingTest
- BFS
- ๋ฐฑํธ๋ํน
- DP
- ์๋ฃ๊ตฌ์กฐ
- ๊ตฌํ
- queue
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- ๋๋น ์ฐ์ ํ์
- stack
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1937 : ์์ฌ์์ด ํ๋ค ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- n x n ๊ฒฉ์ํ์์ ์ํ์ข์ฐ๋ก ์์ง์์ ๋ ๊ฐ์ฅ ๊ธด ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ด๋ ์ ํ์ฌ ์์น ๋ณด๋ค ํฐ ์ชฝ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์ต์ฅ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์ด๊ณ , 4๋ฐฉํฅ ์ด๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ ํ์ ์๊ฒ ํ ์ ์๋๋ก ๊น์ด ์ฐ์ ํ์(DFS)๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด๋์ ํญ์ ๊ฒฉ์ํ์ ์ซ์๊ฐ ํฐ ์ชฝ์ผ๋ก ์ด๋ํ๋ฏ๋ก, ํน์ ์นธ์ผ๋ก ์ง์
ํ๋ ๋ฐฉํฅ์ด ๋ฌ๋ผ๋ ๋๊ฐ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ํญ์ ๊ฐ๋ค. DP๋ฅผ ์ด์ฉํ๋ค.
- ์ด ์๋ฆฌ๋ฅผ ์ด์ฉํด์ ํ ๊ฒฉ์ ์นธ์์ ์์ํด์ ์ต์ฅ ๋ช ๊ธธ์ด๊น์ง ์ด๋ํ ์ ์๋์ง dp ๋ฐฐ์ด์ ์ ์ฅํด๊ฐ๋ค.
- ์ด๋ฏธ ํ์ํ๋ ์นธ์ด๋ผ๋ฉด, ์ฌํ์ ํ ํ์ ์์ด ๊ธฐ์กด ์ต์ฅ๊ฐ์ ์ด์ฉํ๋ฉด ๋๋ค.
- ๋ชจ๋ ์นธ์์ ์์ํด๋ณด๊ณ ์ต๋๊ฐ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
private static int N, max;
private static int[][] map, dp;
private static int[] dx = {-1, 0, 1, 0};
private static int[] dy = {0, 1, 0, -1};
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
map = new int[N][N];
dp = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// DFS
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
max = Math.max(max, dfs(i, j));
}
}
// Output
bw.write(Integer.toString(max));
bw.flush();
}
private static int dfs(int row, int col) {
if (dp[row][col] != 0) {
return dp[row][col];
}
dp[row][col] = 1;
for (int k = 0; k < 4; k++) {
int r = row + dx[k];
int c = col + dy[k];
if (0 <= r && r < N && 0 <= c && c < N && map[row][col] < map[r][c]) {
dp[row][col] = Math.max(dp[row][col], dfs(r, c) + 1);
}
}
return dp[row][col];
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ฌ๊ท ๋ฉ์๋ dfs()์์ ํ์ฌ ๊น์ด๋ฅผ ๋๊ฒจ์ค ํ์ ์์ด, ๋ค์ ์นธ์ ์ขํ๋ง ์์ผ๋ฉด ๋๋ค.
- ์ด๋ฏธ ํ์ํ๋ ์นธ์ด๋ผ๋ฉด ๊ทธ dp๋ฐฐ์ด์ ๊ฐ์ ๋ฐํํ๋ค.
- ํ์ํ์ง ์์๋ค๋ฉด, 4๋ฐฉ ํ์์ผ๋ก ๋ฐ ์ฌ๊ท ํธ์ถ๋ก ์ต์ฅ๊ฐ์ ๊ตฌํ๋ค.
- ์ฌ๊ธฐ์ ํญ์ ํฐ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฏ๋ก, ๊ธฐ์กด ๊ฒฝ๋ก์ ๊ฒน์น ์ผ์ด ์๋ค.
- ๋ชจ๋ ์นธ์์ ์์ํด๋ณด๊ณ , ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์ฒ์ ํ์ด๋ ๋จ์ DFS๋ง ์ ์ฉํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. 5~6 % ๊น์ง๋ ๋ง์๋๋ฐ ๋๋ฌด ๋๋ ธ์๋ค.
- ๋๋ฒ์งธ ํ์ด๋ DP๋ฅผ ์ ์ฉํ๊ธด ํ๋๋ฐ, ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ๊ฑฐ๋ dp๋ฐฐ์ด์ ์ญ๋ฐฉํฅ์ผ๋ก ์ ์ฅํ๋ค.
- dp๋ฐฐ์ด์ ํ์ฌ ์์น๊น์ง ์ค๋๋ฐ ์ต์ฅ์ผ๋ก ๊ฑธ๋ฆฐ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ค.
- ๋ง์ง๋ง ํ์ด๋ dp๋ฐฐ์ด์ ํ์ฌ ์์น์์ ๋ช ๊น์ด๊น์ง ๋ค์ด๊ฐ ์ ์๋์ง๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํ๋ค.
- ๊ธฐ์กด ์ฝ๋๋ค ๋ณด๋ค ์๋์ ์ผ๋ก ๋นจ๋๋๋ฐ, ํญ์ ํฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํด์ ๊ฒฝ๋ก๊ฐ ๊ฒน์น์ง ์๋๋ค๋ ์ ๋ ํฌํจ์์ผฐ๊ณ ,
์ด๋ฏธ ํ์ํ ๊ณณ์ dp๊ฐ์ ์ ํ์ฉํด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค. - dp๋ฐฐ์ด์ ์ ์ฅ ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ๋์ง์ ๋ฐ๋ผ์ ์ด๋ ๊ฒ ํจ์จ์ด ๋ฌ๋ผ์ง๋๊ตฌ๋ ๋ฐฐ์ธ ์ ์์๋ค.
- ๊ธฐ์กด ์ฝ๋๋ค ๋ณด๋ค ์๋์ ์ผ๋ก ๋นจ๋๋๋ฐ, ํญ์ ํฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํด์ ๊ฒฝ๋ก๊ฐ ๊ฒน์น์ง ์๋๋ค๋ ์ ๋ ํฌํจ์์ผฐ๊ณ ,
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_25945 : ์ปจํ ์ด๋ ์ฌ๋ฐฐ์น (0) | 2024.06.15 |
---|---|
BOJ_4179 : ๋ถ! (0) | 2024.06.11 |
BOJ_2146 : ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2024.05.29 |
BOJ_15685 : ๋๋๊ณค ์ปค๋ธ (0) | 2024.05.26 |
BOJ_11066 : ํ์ผ ํฉ์น๊ธฐ (0) | 2024.05.24 |