코딩/알고리즘

[백준][자바]2468 안전영역

알파세 2018. 9. 3. 22:47

초반에 문제를 잘못 읽어서 조금 헤맨 문제


주말 쉬어서 bfs 까먹었을 줄 알았는데 아닌가보다


그리고...뭔가 처음 해답 안보고 맞춘. bfs 문제가 아닐까 싶다..ㅋㅋㅋㅋㅋ


나는 맥스 높이를 세고 거기서 bfs를 반복했다


가장 높은 영역이 9면 


1부터 8까지 bfs를 진행하여 영역이 가장 큰 것을 답으로 제출하면되더라


예전에 친구가 쉬운문제라고 했던 기억이 난다.


그땐 몰랐는데 지금 보니까 쉬운거 같네...


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Point_{
	int x;
	int y;
	Point_(int y, int x ){
		this.x = x;
		this.y = y;
	}
	
}
public class backjoon_2468_안전영역 {
	static int[][] map = new int[101][101];
	static boolean[][] visit = new boolean[101][101];
	static Queue q = new LinkedList();
	static int[] dx = {-1,1,0,0};
	static int[] dy = {0,0,-1,1};
	
	static int N;
	static int max_High = 0;
 	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		
		for(int i = 0 ; i< N; i++) {
			for(int j =0; j< N; j++) {
				map[i][j] = sc.nextInt();
				visit[i][j] = false;
				if ( max_High < map[i][j] ) {
					max_High = map[i][j];
				}
			}
		}
		
		int ans = 0;
		int cnt = 0;
		for (int k = 0 ; k < max_High; k++){
			
			for(int i = 0 ; i< N; i++) {
				for(int j =0; j< N; j++) {
					if( map[i][j] > k && !visit[i][j] ) {
						cnt ++;
						bfs(i,j,k);
					}
				}
			}
			
			for(int i = 0 ; i< N; i++) {
				for(int j =0; j< N; j++) {
					visit[i][j] = false;
				}
			}
		
			if( ans < cnt ) {
				ans = cnt;
			}
			//System.out.println("k = " +k +" cnt = " +cnt);
			cnt = 0;
		}
		
		System.out.println(ans);
		
		
	}
	public static void bfs(int sero, int garo,int high) {
	
		//System.out.println("sero " + sero + " garo " + garo) ;
		visit[sero][garo] = true;
		q.add(new Point_(sero, garo));
		while(!q.isEmpty()) {
			
			Point_ pt = q.poll();
			
			for (int i =0; i < 4; i++) {
				int x = dx[i] + pt.x;
				int y = dy[i] + pt.y;
				if(x >=0 && x < N && y >=0 && y < N ){
					if( map[y][x] > high  && !visit[y][x]) {
						//System.out.println(y + " " + x);
						q.add(new Point_(y,x));
						visit[y][x] = true;
					}
				}
			}
		}
		
	}

}