반응형
https://www.acmicpc.net/problem/3055
3055번: 탈출
문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치��
www.acmicpc.net
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static class Obj {
int x;
int y;
char val;
public Obj(int x, int y, char val) {
this.x = x;
this.y = y;
this.val = val;
}
}
static int R, C, TIME;
static char[][] map;
static Queue<Obj> queue = new LinkedList();
static boolean[][] visited;
static int[][] dir = {{1,0},{0,1},{-1,0},{0,-1}};
static boolean flag = false;
static ArrayList<Obj> list = new ArrayList();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
R = sc.nextInt();
C = sc.nextInt();
map = new char[R][C];
visited = new boolean[R][C];
for(int i=0; i<R; i++) {
String st = sc.next();
for(int j=0; j<C; j++) {
map[i][j] = st.charAt(j);
if(map[i][j] == 'S') {
list.add(new Obj(i, j, 'S'));
visited[i][j] = true;
} else if(map[i][j] == '*') {
list.add(new Obj(i, j, '*'));
visited[i][j] = true;
}
}
}
Collections.sort(list, new Comparator<Obj>() {
@Override
public int compare(Obj o1, Obj o2) {
return Character.compare(o1.val, o2.val);
}
});
for(Obj obj : list) {
queue.offer(obj);
}
BFS();
if(flag) {
System.out.println(TIME);
} else {
System.out.println("KAKTUS");
}
}
public static void BFS() {
while(!queue.isEmpty()) {
int len= queue.size();
TIME++;
for(int i=0; i<len; i++) {
Obj obj = queue.poll();
for(int j=0; j<4; j++) {
int nx = obj.x + dir[j][0];
int ny = obj.y + dir[j][1];
if(isInside(nx, ny) && !visited[nx][ny]) {
if(obj.val == 'S' && map[nx][ny] == 'D') {
flag = true;
return;
} else if(obj.val == '*' && (map[nx][ny] == '.' || map[nx][ny] == 'S')) {
map[nx][ny] = obj.val;
visited[nx][ny] = true;
queue.offer(new Obj(nx, ny, obj.val));
} else if(obj.val == 'S' && map[nx][ny] == '.') {
map[nx][ny] = obj.val;
visited[nx][ny] = true;
queue.offer(new Obj(nx, ny, obj.val));
}
}
}
}
}
}
public static boolean isInside(int x, int y) {
return x>=0 && x<R && y>=0 && y<C;
}
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 11404. 플로이드 (0) | 2021.10.30 |
---|---|
[백준] 1987. 알파벳 (0) | 2020.07.10 |
[백준] 16401. 과자 나눠주기 (0) | 2020.06.08 |
[프로그래머스] 프린터 (0) | 2020.05.04 |
[SWEA] 1251. [S/W 문제해결 응용] 4일차 - 하나로 (0) | 2020.04.16 |