[백준/BOJ]
풀이 및 배운 점
오른쪽, 아래쪽으로 가야하는데, 원하는 답이 나오지 않아 print() 메서드를 만들어 확인해보니 아래쪽으로만 가는것이였다.
이 때, 왜그런거지? 라고 생각하면서 내 코드의 오류를 확인해봤어야 했는데 아 왜 안 돼!? 이렇게만 생각하다보니 오류를 찾는 데 시간이 오래걸렸다.
앞으로는 원하는 결과가 나오지 않는다면, 이렇게 되는 이유는 무엇인지 되돌아 짚어가며 확인해볼 수 있도록 해야겠다.
내가 작성한 코드
import java.io.*;
import java.util.*;
public class Main {
static int DIR = 2;
static int[] dy = {0, 1};
static int[] dx = {1, 0};
static int N;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
int [][] map = new int[N][N];
for(int y=0; y<N; ++y) {
String[] input = br.readLine().split(" ");
for(int x=0; x<N; ++x) {
map[y][x] = Integer.parseInt(input[x]);
}
}
if(bfs(0, 0, map)) {
System.out.println("HaruHaru");
}else {
System.out.println("Hing");
}
}
private static boolean bfs(int i, int j, int[][] map) {
Deque<int[]> dq = new ArrayDeque<>();
boolean[][]vis = new boolean[N][N];
dq.offer(new int[] {i, j});
vis[i][j] = true;
while(!dq.isEmpty()) {
int[] cur = dq.poll();
int y = cur[0];
int x = cur[1];
if(y == N-1 && x == N-1){
return true;
}
int dist = map[y][x];
for(int d=0; d<DIR; ++d) {
int ny = y + dy[d]*dist;
int nx = x + dx[d]*dist;
if(!inRange(ny, nx) || vis[ny][nx])continue;
vis[ny][nx] = true;
dq.offer(new int[] {ny, nx});
}
}
return false;
}
private static void print(int[][] map) {
for(int y=0; y<N; ++y) {
for(int x=0; x<N; ++x) {
System.out.print(map[y][x]+" ");
}
System.out.println();
}
}
private static boolean inRange(int y, int x) {
return 0<=y && y<N && 0<=x && x<N;
}
}
'코딩테스트(Coding Test) > 백준' 카테고리의 다른 글
[백준/BOJ7795] 먹을 것인가 먹힐 것인가 (0) | 2024.08.22 |
---|---|
[백준/BOJ20002] 사과나무 (0) | 2024.07.04 |
[BOJ1238] 파티 (0) | 2024.04.27 |
[BOJ2011] 암호코드 (0) | 2024.02.01 |
[백준] 나머지와 몫이 같은 수 (0) | 2023.10.19 |