16173 점프왕 쩰리 (Small) ⬛

kkmdevel·2024년 10월 20일

코딩테스트

목록 보기
20/21


📋문제 정리

  • 0,0 에서 칸에 적힌 숫자만큼 아래 혹은 오른쪽으로 이동하여 마지막 칸까지 이동한다.

  • 마지막 칸에 도착할 수 있다면 HaruHaru 없다면 Hing 출력

🎯풀이

  • 입력되는 2차원 배열을 저장한다.

  • 스택<int [ ]>을 이용한 dfs로 풀어낸다. [0]은 x / [1]은 y 다.

  • visited[][]로 x,y를 방문하지 않았으면 목표지점인지 확인 후에

  • 목표지점이 아니고 아래로 이동할수있으면 아래 이동한 지점을 stack에 넣는다.

  • 오른쪽으로 이동할 수 있으면 stack에 넣는다.

  • 목표지점이면 HaruHaru 출력 / 목표지점 없이 스택이 비면 Hing 출력

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());
        int[][] arr = new int[n][n];
        boolean[][] visited = new boolean[n][n];
        boolean check = false;

        // 배열 입력 받기
        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());
            }
        }

        // ArrayDeque를 사용한 DFS 구현
        ArrayDeque<int[]> deque = new ArrayDeque<>();
        deque.addFirst(new int[] {0, 0});

        while (!deque.isEmpty()) {
            int[] current = deque.removeFirst();
            int x = current[0];
            int y = current[1];

            if (visited[x][y]) continue; // 이미 방문한 위치는 건너뛰기

            visited[x][y] = true;

            if (arr[x][y] == -1) { // 목표 지점에 도착한 경우
                check = true;
                break;
            }

            // 아래로 이동 가능하면 deque에 추가
            if (x + arr[x][y] < n) {
                deque.addFirst(new int[] {x + arr[x][y], y});
            }

            // 오른쪽으로 이동 가능하면 deque에 추가
            if (y + arr[x][y] < n) {
                deque.addFirst(new int[] {x, y + arr[x][y]});
            }
        }

        // 결과 출력
        if (check) {
            sb.append("HaruHaru");
        } else {
            sb.append("Hing");
        }

        System.out.print(sb.toString()); // StringBuilder 출력
    }
}
profile
25/08/12

0개의 댓글