-
[백준][자바]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