처음에 바이러스의 위치를 받을때 바이러스 숫자가 작은 순으로 퍼져야 하기때문에 Priority Queue를 이용해서 큐를 받아야 한다..만 난 처음에 아무생각 없이 그냥 큐로 짜놓고 우선순위 큐로 바꾸기 싫어서 그냥 배열로 바꾸고 그걸 정렬하고 그걸 큐에 집어넣는 식으로 처리했다.
package com.company;
import java.io.*;
import java.util.*;
class Point{
int X;
int Y;
int number;
Point(int x, int y,int number){
this.X=x;
this.Y=y;
this.number=number;
}
}
public class Main {
public static void printMap(int[][] map){
for(int i=0;i<map.length;i++){
for(int j=0;j<map.length;j++){
System.out.print(map[i][j]+" ");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
Deque<Point> queue = new ArrayDeque<>();
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] dx={0,1,0,-1};
int[] dy={1,0,-1,0};
int[][] map = new int[N][N];
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine());
int j=0;
while (st.hasMoreTokens()){
map[i][j]=Integer.parseInt(st.nextToken());
j++;
}
}
st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
int Y = Integer.parseInt(st.nextToken());
for(int i=0;i<N;i++){
int a=0;
for(int j=0;j<N;j++){
if(map[i][j]!=0){
queue.offer(new Point(i,j,map[i][j]));
}
}
}
Point[] a = queue.toArray(new Point[0]);
Arrays.sort(a,new Comparator<Point>(){
@Override
public int compare(Point o1, Point o2) {
return o1.number-o2.number;
}
});
queue.clear();
for(Point point : a){
queue.add(point);
}
int checkTurn = 0;
Deque<Point> tempDeque = new ArrayDeque<>();
while (checkTurn<S){
if(queue.isEmpty()){
break;
}
for(int i=0;i<=queue.size();i++){
tempDeque.offer(queue.poll());
}
while (!tempDeque.isEmpty()) {
Point p = tempDeque.poll();
for (int i = 0; i < 4; i++) {
if (p.X + dx[i]>=0&&p.Y + dy[i]>=0&&p.X + dx[i]<N&&p.Y + dy[i]<N&&map[p.X + dx[i]][p.Y + dy[i]] == 0) {
map[p.X + dx[i]][p.Y + dy[i]] = p.number;
queue.offer(new Point(p.X + dx[i], p.Y + dy[i], p.number));
}
}
}
//printMap(map);
checkTurn++;
}
bw.write(Integer.toString(map[X-1][Y-1]));
bw.flush();
bw.close();
}
}
'문제풀이' 카테고리의 다른 글
백준 14502번 연구실 JAVA (0) | 2020.11.09 |
---|---|
백준 15686 치킨배달 JAVA (0) | 2020.11.05 |
백준 11479번 통나무건너뛰기 JAVA (0) | 2020.11.03 |
백준 3273번 두수의합 JAVA (0) | 2020.10.11 |
백준 14888번 연산자끼워넣기 JAVA (0) | 2020.10.11 |