티스토리 뷰
문제 - (https://www.acmicpc.net/problem/3109)
백트래킹 문제다
각 행의 0열부터 재귀를 시작해가면서
파이프를 연결하는 것이 한 번이라도 성공하면 그 재귀는 종료시킨다
그리고 다음 행의 0열부터 다시 파이프를 연결한다.
이때, 전 행의 0열부터 연결해왔던 파이프는 visited배열에 표시가 되어 있으므로
파이프를 연결했던 곳은 다시 가지 않으면서 재귀를 진행한다
📌주의할 점
- 파이프는 무조건 오른쪽 위, 오른쪽, 오른쪽 아래 방향을 순서로 향하게 해서 연결을 시도해야 한다. 잘 생각해보면 무조건 오른쪽 방향으로만 파이프를 연결할 수 있는 조건 때문에 앞서 말한 방향을 순서로 연결해야 최대한 많은 파이프를 연결할 수 있다.
코드
package algorithm.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Restaurant {
static int r, c;
static char[][] map;
static int answer;
static int[] dy = {-1, 0, 1}; //오른쪽 위 대각선, 오른쪽, 오른쪽 아래 대각선으로 연결
static boolean[][] visited;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
map = new char[r][];
visited = new boolean[r][c];
for (int i = 0; i < r; i++) {
map[i] = br.readLine().toCharArray();
}
// 첫째열과 마지막열은 각각 수도관과 식당이므로 비어있음
for (int i = 0; i < r; i++) {
connect(i, 0);
}
System.out.println(answer);
}
public static boolean connect(int y, int x) {
// 기저 : 이동하다가 마지막 열에 도착하면 종료
visited[y][x] = true;
if (x == c - 1) {
answer++;
return true;
}
for (int d = 0; d < 3; d++) {
int ny = y + dy[d];
int nx = x + 1;
if (ny < 0 || ny >= r) continue;
if (map[ny][nx] == 'x' || visited[ny][nx]) continue; // 건물이 있으면 갈 수 없음, 이미 파이프가 놓인 자리도 갈 수 없음
if (connect(ny, nx)) return true; // 한번이라도 연결된다면 재귀종료
}
return false;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1261번 / Java / 알고스팟 (0) | 2020.09.05 |
---|---|
[백준] 18513번 / Java / 샘터 (0) | 2020.09.05 |
[백준 BOJ] 16235번 / Java / 나무 재테크 (1) | 2020.08.15 |
[백준] 1969번 / Java / DNA - 그리디 (0) | 2020.07.03 |
[백준] 13458번 / Java / 시험 감독 - 그리디 (0) | 2020.06.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 그리디
- 사다리 조작
- 브라우저 요청
- header
- 우선순위큐
- 인구이동
- 드래곤 커브
- dfs
- 배열순회
- withCredentials
- 자바
- Greedy
- 구현
- 큰 수 만들기
- 재귀
- BOJ
- java
- 코테
- Access-Control-Allow-Origin
- 16234
- 시뮬레이션
- 프로그래머스
- 백준
- 코딩테스트
- 아기상어
- 코딩테스트 연습
- 14891
- 톱니바퀴
- 구명보트
- 완전탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함