NOT FOUND

[코테] 백준 16173 점프왕 쩰리: DFS Java 본문

coding test

[코테] 백준 16173 점프왕 쩰리: DFS Java

이종은 2025. 5. 28. 23:01

https://www.acmicpc.net/problem/16173

 

백준은 이름이 귀여운 게 많아서 좋다

 

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

// https://www.acmicpc.net/problem/13565
public class baekjoon_13565 {
    static int N;
    static int[][] arr;
    static boolean[][] visited;
    static int[] dx = {0, 1};
    static int[] dy = {1, 0};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());

        arr = new int[N][N];
        visited = new boolean[N][N];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j = 0; j < N; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        dfs(0,0);

        System.out.println("Hing");
    }

    public static void dfs(int i, int j) {
        if(arr[i][j] == -1) {
            System.out.println("HaruHaru");
            System.exit(0);
        }
        visited[i][j] = true;

        for (int k = 0; k < 2; k++) {
            int nx = i + (dx[k] * arr[i][j]);
            int ny = j + (dy[k] * arr[i][j]);

            if(nx >= 0 && ny >= 0 && nx < N && ny < N && !visited[nx][ny]) {
                dfs(nx, ny);
            }
        }
    }
}

 

원래 visited을 체크 하지 않아도 될 줄 알았는데, 메모리 초과가 났다

체크 안 한 이유:

우측과 아래로 이동 / 사실상 되돌아가는 경로가 없음

그러나 너무 스택이 많이 쌓이면서 메모리 초과가 일어난 것 같다