ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준][자바]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;
    					}
    				}
    			}
    		}
    		
    	}
    
    }
    
    


    '코딩 > 알고리즘' 카테고리의 다른 글

    [백준][3055][자바] 탈출  (0) 2018.09.30
    [백준][자바][5532]방학숙제  (0) 2018.09.15
    [백준][자바]2589 보물섬  (0) 2018.08.29
    [백준][2573] 빙산  (0) 2018.08.27
    [파이썬][백준]2979 트럭주차  (0) 2018.07.27

    댓글

Designed by Tistory.