반응형
출처 : https://www.acmicpc.net/problem/16174
문제
‘쩰리’는 점프하는 것을 좋아하는 젤리다. 단순히 점프하는 것에 지루함을 느낀 ‘쩰리’는 새로운 점프 게임을 해보고 싶어 한다. 새로운 점프 게임의 조건은 다음과 같다.
- ‘쩰리’는 가로와 세로의 칸 수가 같은 정사각형의 구역 내부에서만 움직일 수 있다. ‘쩰리’가 정사각형 구역의 외부로 나가는 경우엔 바닥으로 떨어져 즉시 게임에서 패배하게 된다.
- ‘쩰리’의 출발점은 항상 정사각형의 가장 왼쪽, 가장 위의 칸이다. 다른 출발점에서는 출발하지 않는다.
- ‘쩰리’가 이동 가능한 방향은 오른쪽과 아래 뿐이다. 위쪽과 왼쪽으로는 이동할 수 없다.
- ‘쩰리’가 가장 오른쪽, 가장 아래 칸에 도달하는 순간, 그 즉시 ‘쩰리’의 승리로 게임은 종료된다.
- ‘쩰리’가 한 번에 이동할 수 있는 칸의 수는, 현재 밟고 있는 칸에 쓰여 있는 수 만큼이다. 칸에 쓰여 있는 수 초과나 그 미만으로 이동할 수 없다.
새로운 게임이 맘에 든 ‘쩰리’는, 계속 게임을 진행해 마침내 최종 단계에 도달했다. 하지만, 게임을 진행하는 구역이 너무 넓어져버린 나머지, 이 게임에서 이길 수 있는지 없는지 가늠할 수 없어졌다. ‘쩰리’는 유능한 프로그래머인 당신에게 주어진 구역에서 승리할 수 있는 지 알아봐 달라고 부탁했다. ‘쩰리’를 도와 주어진 게임 구역에서 끝 점(오른쪽 맨 아래 칸)까지 도달할 수 있는지를 알아보자!
입력
입력의 첫 번째 줄에는 게임 구역의 크기 N (2 ≤ N ≤ 64)이 주어진다.
입력의 두 번째 줄부터 마지막 줄까지 게임판의 구역(맵)이 주어진다.
게임판의 승리 지점(오른쪽 맨 아래 칸)에는 -1이 쓰여있고, 나머지 칸에는 0 이상 100 이하의 정수가 쓰여있다.
출력
‘쩰리’가 끝 점에 도달할 수 있으면 “HaruHaru”(인용부호 없이), 도달할 수 없으면 “Hing” (인용부호 없이)을 한 줄에 출력합니다.
풀이방법
- dfs 활용
코드
package 알고리즘스터디문제;
import java.awt.Point;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 점프왕젤리_16174 {
static int[] dr = {0, 1};
static int[] dc = {1, 0};
static int N;
static int[][] map ;
static boolean[][] visited;
static int answer = -1;
static Queue<Point> queue = new LinkedList<>();
static void dfs (int r, int c) {
int nr, nc ;
int Cur = map[r][c];
for ( int d=0 ;d<2; d++) {
nr = r + dr[d]*Cur; // 처음엔 오른쪽으로 , 두번째는 왼쪽
nc = c + dc[d]*Cur;
if ( nr >= N || nc >= N || visited[nr][nc] ) continue;
if ( map[nr][nc] == -1 ) { // 방문하면
answer = 1;
return;
}
visited[nr][nc] = true; // 방문처리
// 오른쪽으로 가보고
// 아래쪽으로 가보고
dfs (nr,nc);
}
}
static void bfs(int r, int c) {
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
N = sc.nextInt();
map = new int[N][N];
visited = new boolean[N][N];
for ( int i=0; i< N; i++) {
for ( int j=0; j < N; j++) {
map[i][j] = sc.nextInt();
}
}
visited[0][0] = true;
dfs(0,0);
System.out.println( (answer == -1)? "Hing" : "HaruHaru" );
}
}
반응형
'알고리즘' 카테고리의 다른 글
[백준] 벽 부수고 이동하기2 14442번 [JAVA] (0) | 2020.08.30 |
---|---|
[백준] 벽 부수고 이동하기 2206 [ JAVA ] (0) | 2020.08.29 |
[백준] 현수막 14716 [ JAVA ] (0) | 2020.08.29 |
[백준] 나이트의 이동 7562 [ Java ] (0) | 2020.08.28 |
[백준] 스타트와 링크 14889 [JAVA] (0) | 2020.08.28 |