[BOJ] 18405. 경쟁적 전염
16 Apr 2026
Reading time ~1 minute
풀이
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int N, K, S, Y, X;
static int[][] map;
static int[] dy = {1, 0, -1, 0};
static int[] dx = {0, 1, 0, -1};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
map = new int[N][N];
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
map[i][j] = sc.nextInt();
}
}
S = sc.nextInt();
Y = sc.nextInt();
X = sc.nextInt();
ArrayList<Virus> list = new ArrayList<>();
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
if(map[i][j] != 0) {
list.add(new Virus(i,j,map[i][j],0));
}
}
}
Collections.sort(list);
Queue<Virus> q = new LinkedList<>();
for(int i = 0; i < list.size(); i++)
q.add(list.get(i));
while(!q.isEmpty()) {
Virus v = q.poll();
if(v.sec == S) break;
for(int i = 0; i < dy.length; i++) {
int ny = v.y + dy[i];
int nx = v.x + dx[i];
if(ny < 0 || ny >= N || nx < 0 || nx >= N) continue;
if(map[ny][nx] == 0) {
map[ny][nx] = v.num;
q.add(new Virus(ny, nx, v.num,v.sec+1));
}
}
}
System.out.println(map[Y-1][X-1]);
}
static class Virus implements Comparable<Virus>{
int y,x,num,sec;
Virus(int y, int x,int num, int sec) {
this.y = y;
this.x = x;
this.num = num;
this.sec = sec;
}
@Override
public int compareTo(Virus other) {
if (this.num < other.num) {
return -1;
}
return 1;
}
}
}