Tags
- PGM
- ๊ตฌํ
- Dynamic Programming
- ๊ทธ๋ํ ์ด๋ก
- LV2
- greedy
- ๋ฌธ์์ด
- Brute Force Algorithm
- Java
- ์ ์๋ก
- queue
- ๋๋น ์ฐ์ ํ์
- Python
- sort
- BOJ
- ์๋ฃ๊ตฌ์กฐ
- Study
- ๋ฐฑํธ๋ํน
- ์ํ
- stack
- SpringBoot
- ์ ๋ ฌ
- CodingTest
- ๊ทธ๋ํ ํ์
- ์๋ฎฌ๋ ์ด์
- BFS
- ๊น์ด ์ฐ์ ํ์
- DP
- ๊ต์ฌ
- dfs
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_3109 : ๋นต์ง ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- R x C ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ 0๋ฒ ์ด๋ถํฐ C-1๋ฒ ์ด๊น์ง ํ์ดํ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ ํ๋ค.
- '.' ์๋ ํ์ดํ๋ฅผ ๋์ ์ ์๊ณ , 'x'์๋ ๋์ ์ ์๋ค.
- ์ฒซ ์ด๊ณผ ๋ ์ด์ '.' ๋ก๋ง ์ฑ์์ ธ์๋ค.
- ํ์ดํ๋ ์ค๋ฅธ์ชฝ ์, ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ ์๋๋ก๋ง ์ฐ๊ฒฐํ ์ ์๋ค.
- ๋์ ์ ์๋ ํ์ดํ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ ํ์ด ์ ๋ต ๐ธ
- R์ด ์ต๋ 1๋ง, C๊ฐ ์ต๋ 500์ด๋ฏ๋ก ํจ์จ์ ์ธ ์ ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.(๊ทธ๋ฆฌ๋)
- ์ต๋ํ ๋ง์ ํ์ดํ๋ฅผ ๋๊ธฐ ์ํด์๋ ๊ฐ๋ฅํ ์์ชฝ์ผ๋ก ํ์ดํ๋ฅผ ์ฐ๊ฒฐํ๋ค.
- 0๋ฒ ์ด์ 0๋ฒ ํ๋ถํฐ R-1๋ฒ ํ๊น์ง ์์๋๋ก ์์ ์์น๋ก ์ผ๋๋ค.
- DFS์ ๋ฐฑํธ๋ํน์ ํตํด ํ์ดํ๊ฐ ์ฐ๊ฒฐ ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
- ํ ์ขํ์์ ์ฐ์, ์ฐ, ์ฐํ ์์ผ๋ก ํ์(์ฌ๊ท ๋ฉ์๋ ํธ์ถ) ํ๋ค.
- ๋ง์ฝ ํ์ดํ๊ฐ ์ฐ๊ฒฐ ๋๋ค๋ฉด, ์ฌ๊ท ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ค์งํด์ผ ํ๋ค. (ํ์ดํ๊ฐ ๋ ๊ฐ๋๊ฐ ๋์ง ์๋๋ก)
- ํ์ดํ๋ฅผ ๋์ ์ ์๋๋ผ๋ ์ฒดํฌํด๋๋ค. (์ค๋ณต์ผ๋ก ๊ฒ์ฌํ์ง ์๋๋ก)
- ์ํ ๊ณต๊ฐ ํธ๋ฆฌ(state space tree) ํ์์ด๊ธฐ๋ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static int r, c;
private static char[][] pipeline;
private static int[] dx = {-1, 0, 1}; // ์ฐ์, ์ฐ, ์ฐํ
private static int[] dy = {1, 1, 1}; // ์ฐ์, ์ฐ, ์ฐํ
private static boolean pipe(int x, int y) {
// print();
if (y == c - 1) return true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (0 <= nx && nx < r && 0 <= ny && ny < c && pipeline[nx][ny] == '.') {
pipeline[nx][ny] = 'X';
if (pipe(nx, ny)) return true;
}
}
return false;
}
private static void print() {
System.out.println("=======================================");
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
System.out.print(pipeline[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) throws IOException {
// input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
pipeline = new char[r][c];
for (int i = 0; i < r; i++) {
pipeline[i] = br.readLine().toCharArray();
}
// recursion
int answer = 0;
for (int i = 0; i < r; i++) {
if (pipe(i, 0)) answer++;
}
// output
System.out.println(answer);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- r * c ํฌ๊ธฐ์ ๊ฒฉ์๋ฅผ 2์ฐจ์ ๋ฐฐ์ด pipeline์ ๊ธฐ๋กํ๋ฉฐ ํ์์ ์งํํ๋ค. (์ํ ๊ณต๊ฐ ํธ๋ฆฌ)
- 0์ด์ ์์ ํ ๋ฒํธ๋ฅผ 0๋ถํฐ r-1 ๊น์ง ์์๋๋ก ์ ํํ๋ฉฐ ํ์์ ์งํํ๋ค.
- pipe() ๋ฉ์๋
- ํ์ฌ ์์น์์ ์ฐ์, ์ฐ, ์ฐํ ์์ผ๋ก ์งํ ๊ฐ๋ฅํ๋ฉด ํ์ดํ๋ฅผ ๋์ผ๋ฉฐ ๋ค์ pipe() ๋ฉ์๋๋ฅผ ์ฌ๊ท ํธ์ถํ๋ค.
- ๋ง์ฝ ๋(c-1์ด)๊น์ง ํ์ดํ๋ฅผ ๋์๋ค๋ฉด ํ๋์ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก, true๋ฅผ ๋ฐํํด์ ๋ชจ๋ ์ฌ๊ท ๋ฉ์๋๋ฅผ ์ข ๋ฃํ๋ค.
- ํ์ดํ๋ฅผ ๋์ง ๋ชปํด false๋ฅผ ๋ฐํ ํ๋๋ผ๋, ์ด๋ฏธ ๋์ ํ์ดํ (์ด๋ฏธ ๊ฒ์ฌํด์ 'X'๋ฅผ ์ฑ์) ๋ฅผ ๋ค์ '.'์ผ๋ก ๋ฐ๊พธ์ง ์๋๋ค. (์ค๋ณต ๊ฒ์ฌ ๋ฐฉ์ง : ์ด์ฐจํผ ๋ค๋ฅธ ํ์ดํ๊ฐ ์ฌ๊ธฐ์ ๋ ๋๋๋ผ๋ ์คํจํ ๊ฒ์)
- ํ์ดํ๊ฐ ๋๊น์ง ๋๋ฌํ ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๊ณจ๋ 2 ๋ฌธ์ ์์ง๋ง, ์ํ ๊ณต๊ฐ ํธ๋ฆฌ ํ์์ผ๋ก ๋น์ทํ ๋ฌธ์ ์ธ BOJ_6987_์๋์ปต ์ ํ๊ณ ์ด์ด์ ํ์ดํด์ ๊ฐ๋จํ ํ ์ ์์๋ค.
- ์๋์ปต ๋ณด๋ค ๋์ด๋๊ฐ ๋์ ์ฃผ์ ํฌ์ธํธ๋ boolean ๋ฐํ๊ฐ์ผ๋ก ์ฌ๊ท ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ข
๋ฃํ๋ ๊ฒ, ๊ฐ๋ฅํ ์ฐ์๋จ ์ชฝ์ผ๋ก ํ์ดํ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ทธ๋ฆฌ๋ ์ ์ ํ, ์ด๋ฏธ ๊ฒ์ฌํ ์ขํ๋ ์ค๋ณต ๊ฒ์ฌ๋ฅผ ํ์ง ์๋๋ค๋ ์ 3๊ฐ์ง ์ด๋ค.
- ์ค๋ณต ๊ฒ์ฌ๋ฅผ ๋ฐฉ์งํ์ง ์์์ 1ํ ํ๋ ธ๋ค. (x๋ฅผ ์ง์ฐ๊ณ ๋ค์ '.'์ ์ฑ์ ์๋ค.)
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1717 : ์งํฉ์ ํํ (0) | 2023.03.08 |
---|---|
BOJ_1926 : ๊ทธ๋ฆผ (0) | 2023.03.05 |
BOJ_6987 : ์๋์ปต (0) | 2023.02.21 |
BOJ_4963 : ์ฌ์ ๊ฐ์ (0) | 2023.02.21 |
BOJ_17281 : โพ (0) | 2023.02.20 |