-
[백준][2573] 빙산코딩/알고리즘 2018. 8. 27. 22:38
파이썬으로 하려다 정말 10번 넘는 런타임에러에 지쳐
다른 사람 소스코드를 참조한(거의..;) 한 코드다..
dfs 문제를 오랜만에 접하다 보니 정말 감이 없어서 오래걸렸다...
그래도 조금은 익숙해진모양이다 .
이 문제는 분리된영역을 찾는 문제인데
dfs는 연결영역을 한번에 끝까지 가니 dfs가 몇번 돈지 확인하면 된다
divide_ 함수를 통해서 dfs 를 실행시키고 그게 몇번 실행된지를 알면된다..
파이썬으로 짠 사람이 한명있더라.. 대단하다....
import java.util.Scanner; public class bingsan2573 { static int[][] map = new int[301][301]; static int[][] temp = new int[301][301]; static int[][] visit = new int[301][301]; //상하 좌우 //[-1,0],[1,0],[0,-1],[0,1] static int[] dx = { -1, 0, 1, 0 }; static int[] dy = { 0, -1, 0, 1 }; static int N; static int M; public static void main(String[] args) { Scanner sc=new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); for(int i = 0 ; i < N; i++) { for(int j = 0; j
0 ) { temp[i][j] = Count_Iceberg(i,j); } } } for(int i = 0 ; i < N; i++) { for(int j = 0; j 0 ) { divide_Num += 1; dfs(i,j); } } } return divide_Num; } public static void dfs(int sero, int garo) { //System.out.println("sero " + sero +" garo " + garo); visit[sero][garo] = 1; for(int i = 0 ; i< 4; i++) { int y = sero + dy[i]; int x = garo + dx[i]; if(y >= 0 && y < N && x < M && x >= 0 ) { if(map[y][x] > 0 && visit[y][x] == 0) { dfs(y,x); } } } } public static int Count_Iceberg(int sero, int garo) { int x= 0; int y= 0; int icebergCnt = 0; for(int i = 0 ; i< 4; i++) { y = sero + dy[i]; x = garo + dx[i]; if(y >= 0 && y < N && x < M && x >= 0 ) { if(map[y][x] <= 0 && map[sero][garo] > 0) { icebergCnt++; } } } return icebergCnt ; } } '코딩 > 알고리즘' 카테고리의 다른 글
[백준][3055][자바] 탈출 (0) 2018.09.30 [백준][자바][5532]방학숙제 (0) 2018.09.15 [백준][자바]2468 안전영역 (0) 2018.09.03 [백준][자바]2589 보물섬 (0) 2018.08.29 [파이썬][백준]2979 트럭주차 (0) 2018.07.27