• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BOJ
    • Programmers
    • SWEA
    • LeetCode
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Server
      • Server
      • Spring
      • NodeJS
    • DataBase
      • DataBase
      • MySQL
      • MongoDB
  • Programming
    • Programming
    • Java
    • JS
    • Python
    • CleanCode
  • ComputerScience
    • DataStructure
    • Algorithm

[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;
		}
	}	
}


구현BFS Share