할껀하고놀자

[백준] 16234번 인구이동 본문

[IT]/백준

[백준] 16234번 인구이동

working_hard 2019. 5. 30. 17:34
728x90
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
	static int [] dy = {0,0,1,-1};
	static int [] dx = {1,-1,0,0};
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int l = sc.nextInt();
		int r = sc.nextInt();
		int [][] a = new int [n][n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				a[i][j] = sc.nextInt();
			}
		}
		int ans = 0;
		while(true) {
			if(bfs(a,l,r)) {
				ans++;
			}else {
				break;
			}
		}
		System.out.println(ans);
	}
	static boolean bfs(int [][] a,int l,int r) {
		int n = a.length;
		boolean [][] c = new boolean [n][n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				c[i][j] = false;
			}
		}
		boolean ok = false;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if(c[i][j]==false) {
					Queue<Integer> q = new LinkedList<>();
					q.add(i);q.add(j);
					c[i][j] = true;
					int sum = a[i][j];
					Queue<Integer> s = new LinkedList<>();
					s.add(i);s.add(j);
					while(!q.isEmpty()) {
						int y = q.remove();
						int x = q.remove();
						for (int k = 0; k < 4; k++) {
							int ny = y+dy[k];
							int nx = x+dx[k];
							if(0<=ny && ny<n && 0<=nx&& nx<n) {
								if(c[ny][nx])continue;
								int diff = a[ny][nx] - a[y][x];
								if(diff<0) {
									diff = -diff;
								}
								if(l<=diff && diff<=r) {
									q.add(ny);q.add(nx);
									s.add(ny);s.add(nx);
									c[ny][nx] = true;
									ok=true;
									sum+=a[ny][nx];
								}
							}
						}
					}
					int val = sum / (s.size()/2);
					while(!s.isEmpty()) {
						int y = s.remove();
						int x = s.remove();
						a[y][x] = val;
					}
				}
			}
		}
		return ok;
	}
}

포인트 : 인구 이동이 이루어졌다면 하나씩 증가하고, 더이상 이루어 지지 않는다면 출력하기.

'[IT] > 백준' 카테고리의 다른 글

[백준] 11047번 동전 0  (0) 2019.05.31
[백준] 5585번 거스름돈  (0) 2019.05.31
[백준] 16236번 아기상어  (0) 2019.05.30
[백준] 1181번 단어 정렬  (0) 2019.05.28
[백준] 1427번 소트인사이드  (0) 2019.05.28
Comments