728x90
문제
https://www.acmicpc.net/problem/16173
어떻게 풀 것인가?
문제를 읽자마자, DFS를 떠올렸다. 다만 문제가 현재 밟고 있는 칸의 수만큼 이동이 가능하다는 점만 유의해서 푼다면 쉽게 풀리는 문제였다.
풀면서 놓쳤던점
없음.
이 문제를 통해 얻어갈 것
인접행렬의 DFS 활용문제
내 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준알고리즘 16173번 점프왕 쩰리(small)
public class Main {
static int N;
static int[][] map;
static boolean[][] visit;
static String result = "Hing";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
map = new int[N][N];
visit = new boolean[N][N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
DFS(0, 0);
System.out.println(result);
}
static void DFS(int x, int y) {
if (map[x][y] == -1) {
result = "HaruHaru";
return;
}
visit[x][y] = true;
for (int i = 0; i < 2; i++) {
int ndx = x + map[x][y];
int ndy = y + map[x][y];
if (range(ndx, y)) {
if (!visit[ndx][y]) DFS(ndx, y);
}
if (range(x, ndy)) {
if (!visit[x][ndy]) DFS(x, ndy);
}
}
}
static boolean range(int x, int y) {
return x >= 0 && x < N && y >= 0 && y < N;
}
}
참고
X
728x90
'BaekJoon' 카테고리의 다른 글
[BaekJoon] 1300번 k번째 수 (Java) 문제 풀이 [Gold 2] (2) | 2023.07.25 |
---|---|
[BaekJoon] 15886번 내 선물을 받아줘2 (Java) 문제 풀이 [Silver 3] (0) | 2023.07.24 |
[BaekJoon] 9372번 상근이의 여행 (Java) 문제 풀이 [Silver 4] (0) | 2023.07.24 |
[백준 알고리즘] 12851번 숨박꼭질 2 (Java) 문제 풀이 (2) | 2023.07.23 |
[백준 알고리즘] 1238번 파티(Java) 문제 풀이 (0) | 2023.07.04 |