728x90
반응형
<문제 링크>
https://www.acmicpc.net/problem/16173
16173번: 점프왕 쩰리 (Small)
쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로, (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다.
www.acmicpc.net
https://www.acmicpc.net/problem/16174
<풀이>
이 문제는 주어진 맵 밖을 벗어나거나 -1(맨 우측 하단)에 도달하지 못하면 게임에 져서 "Hing"을 출력하고 -1에 도달하면 게임에서 승리해 "HaruHaru"를 출력한다.
세부 조건으로 시작 좌표는 맨 좌측 상단인 (0, 0)이고 움직이는 방향은 우측 또는 하단이지만, 움직일 수 있는 거리는 현재 내가 있는 칸의 숫자이다.
이런 그래프 탐색 문제는 한 번에 목적지를 찾아 내는 BFS를 애용한다.
단순한 문제라고 생각해 메모리 초과나 시간 복잡도는 생각하지 않고 기본적인 BFS만 수행했더니 문제를 쉽게 해결할 수 있었다.
움직이는 방향이 우측 또는 하단이기 미래의 우측 또는 하단의 칸 위치를 구해 맵을 벗어나면 탐색 큐에 넣지 않고 맵을 벗어나지 않는다면 탐색 큐에 넣어 BFS를 수행했다.
<코드>
board[][]: 맵
visited[][]: 방문 여부 리스트
succcess: 게임 승리 여부 판단하는 트리거
focus: 현재 있는 칸
bottom, right: 미래의 하단 칸의 좌표와 미래의 우측 칸의 좌표
package graph;
import java.util.*;
public class B16174 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] board = new int[N][N];
boolean[][] visited = new boolean[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
board[i][j] = sc.nextInt();
visited[i][j] = false;
}
}
bfs(board, visited);
sc.close();
}
static void bfs(int[][] board, boolean[][] visited){
int len = board.length;
boolean success = false;
Queue<int[]> que = new LinkedList<>(); // 큐
que.add(new int[] {0, 0}); // 시작 정점 추가
while (!que.isEmpty()) {
int[] focus = que.poll();
int r = focus[0], c = focus[1];
visited[r][c] = true;
if(board[r][c] == -1){
success = true;
break;
}
int bottom = r + board[r][c], right = c + board[r][c];
if (bottom < len && !visited[bottom][c]){
que.add(new int[] {r + board[r][c], c});
visited[bottom][c] = true;
}
if (right < len && !visited[r][right]){
que.add(new int[] {r, c + board[r][c]});
visited[r][right] = true;
}
}
if(success){
System.out.println("HaruHaru");
}else{
System.out.println("Hing");
}
}
}
728x90
반응형
'~2023' 카테고리의 다른 글
[Android] Context Menu의 두 가지 모드 - Floating, Action (0) | 2021.11.17 |
---|---|
[Android] 상단바(Action bar)에 옵션 메뉴 구현하기 (0) | 2021.11.17 |
[Android] xml이 아닌 inflate를 사용해 View 꾸미기 (0) | 2021.11.16 |
[Git] GitHub에 대용량 파일 업로드 하기 (Git lfs) (0) | 2021.11.12 |
[Java] 백준 16173번 문제, 점프왕 쩰리(Small) (0) | 2021.11.09 |