Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 인터페이스
- nextInt
- python
- Final
- polymorphism
- Encapsulation
- 프림알고리즘
- 백준
- 17472
- this
- 최소신장트리
- 캡슐화
- inheritance
- 다형성
- 버퍼비우기
- 상속
- 와일드카드
- 내부 클래스
- Scanner
- 열거형
- 객체지향
- 객체 지향
- abstract
- enum
- 제네릭
- 추상 클래스
- java
- 추상화
- 생성자
Archives
- Today
- Total
쫑쫑이의 블로그
백준 17070 파이프 옮기기 1 Java [DFS] 본문
https://www.acmicpc.net/problem/17070
공통적으로 대각선 체크(오른쪽, 아래, 대각선 오른쪽아래 모두 0인지)해주고
가로와 대각선일때 가로 체크(오른쪽 0인지),
세로와 대각선일때 세로 체크(아래 0인지)해서
dfs로 탐색해서 N,N에 도달하면 카운트해준다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[][] temps;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
temps = new int[N][];
Stack<int[]> stack = new Stack<>();
stack.add(new int[]{0, 0, 1});
int cnt = 0;
for (int n = 0; n < N; n++) {
temps[n] = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
}
while (!stack.isEmpty()) {
int[] arr = stack.pop();
if (arr[1] == N - 1 && arr[2] == N - 1) cnt++;
else {
if (isRange(arr[1], arr[2], N) && isBlock(2, arr)) stack.add(new int[]{2,arr[1]+1,arr[2]+1});
if ((arr[0] == 0 || arr[0] == 2) && isRange(arr[2], N) && isBlock(0, arr)) stack.add(new int[]{0, arr[1], arr[2] + 1});
if ((arr[0] == 1 || arr[0] == 2) && isRange(arr[1], N) && isBlock(1, arr)) stack.add(new int[]{1, arr[1] + 1, arr[2]});
}
}
System.out.println(cnt);
}
static boolean isRange(int value, int num) {
return (value < num - 1) ? true : false;
}
static boolean isRange(int value1, int value2, int num) {
return (value1 < num - 1 && value2 < num - 1) ? true : false;
}
static boolean isBlock(int arrow, int[] arr) {
if (arrow == 0) return temps[arr[1]][arr[2]+1] == 0 ? true : false;
else if (arrow == 1) return temps[arr[1]+1][arr[2]] == 0 ? true : false;
else return (temps[arr[1]][arr[2]+1] == 0 && temps[arr[1]+1][arr[2]] == 0 && temps[arr[1]+1][arr[2]+1] == 0) ? true : false;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 1967 트리의 지름 Java [트리, DFS] (0) | 2022.10.07 |
---|---|
백준 1167 트리의 지름 Java [트리, DFS] (0) | 2022.10.07 |
백준 2263 트리의 순회 Java [트리 순회] (0) | 2022.10.07 |
백준 1043 거짓말 Java [DFS] (0) | 2022.10.05 |
백준 1149 RGB거리 Java [DP] (0) | 2022.10.05 |