데이터 엔지니어링 정복/Algorithm

[DFS] 백준 - 점프왕 쩰리 (Large) / (16174)

eeaarrtthh 2022. 5. 25. 13:02
728x90
반응형

-문제

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

 

16174번: 점프왕 쩰리 (Large)

쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로,  (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다.

www.acmicpc.net

 

-코드 자바

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

public class Main {

static int N;
static int[][] map;
static boolean[][] visit;

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

        if( N==1 || N>64 ) System.exit(0);

        map = new int[N][N];
        visit = new boolean[N][N];

        StringTokenizer st;

        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 );

        //위 DFS메서드에서 목표지점 도달하지 못하고 
        //빠져나왔을 경우 게임실패
        System.out.println( "Hing" );
    }

    static void DFS( int x, int y ) {
        //DFS 메서드를 호출한 좌표 방문처리
        visit[x][y] = true;

        //목표지점에 도달했을 경우 종료
        if( x==N-1 && y==N-1 ) {
            System.out.println( "HaruHaru" );
            System.exit(0);
        }

        //오른쪽과 아래쪽으로 좌표이동
        int nx = x + map[x][y]; //오른쪽
        int ny = y + map[x][y]; //아래쪽

        //오른쪽, 아래쪽가는 경우를 반복문으로 표현
        //i=0이면 오른쪽, i=1이면 아래쪽
        for( int i=0; i<2; i++ ) {
            if( i==0 ) {
                //공간을 벗어날경우 해당 좌표 패스
                if( nx<0 || nx>=N ) continue;

                //방문했다면 해당 좌표 패스
                if( visit[nx][y] ) continue;

                //방문 안했다면 (nx, y)좌표에서 DFS메서드 호출
                DFS( nx, y );
            }
            else {
                //공간을 벗어날경우 해당 좌표 패스
                if( ny<0 || ny>=N ) continue;

                //방문했다면 해당 좌표 패스
                if( visit[x][ny] ) continue;

                //방문 안했다면 (x, ny)좌표에서 DFS메서드 호출
                DFS( x, ny );
            }
        }
        
    }
}
728x90
반응형