BOJ_2468_안전영역

2021. 8. 18. 14:13백준 알고리즘(BOJ)

1

구분: BFS, DFS

언어: Java

전략:

  • 기본 DFS를 푸는 방식을 적용한다.
  • 다만 비가 0부터 100까지 오니까 그때마다 조건에 맞는 배열을 새로 생성해주었다. 

 

 


2. 코드

import java.util.Arrays;
import java.util.Scanner;
public class BOJ_2468 {

	static int[][] map;
	static int[][] rain;
	static int[] level;
	static int n;
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		n = scanner.nextInt();
		map = new int[n][n];
		for(int i = 0; i<n; i++) {
			for(int j = 0; j<n; j++) {
				map[i][j] = scanner.nextInt();
			}
		}
		
		//각 강수량마다 섬의 개수  
		level = new int[101];
		
	
		//비가 오는 cm만큼 반복 0 ~ 100cm 
		for(int c = 0; c<=100; c++) {
			
			int cnt = 0;
			
			//메 반복때마다 map(원본)과 동일한 배열을 생성
			rain = new int[n][n];
			for(int i = 0; i<n; i++) {
				for(int j = 0; j<n; j++) {
					rain[i][j] = map[i][j];
				}
			}

			
			for(int i = 0; i<n; i++) {
				for(int j = 0; j<n; j++) {
					//물에 잠기면 0, 안 잠기면 1
					if(rain[i][j]<=c) rain[i][j] = 0;
					else rain[i][j] = 1;	
				}
			}
			
			for(int i = 0; i<n; i++) {
				for(int j = 0; j<n; j++) {
					if(rain[i][j]==1) {
						cnt++;
						dfs(i, j);
					}
				}
			}
			level[c] = cnt;
			
		}//end for
		
		Arrays.sort(level);
		System.out.println(level[100]);
		
		
	}//main
	
	//탐색하는 dfs함수 
	public static void dfs(int y, int x) {
		
		rain[y][x] = 0;
		
		for(int d = 0; d<4; d++) {
			int nx = x + dx[d];
			int ny = y + dy[d];
			
			if(nx<0 || ny<0 || nx>=n || ny>=n) continue;
			if(rain[ny][nx]==0) continue;
			
			dfs(ny, nx);	
		}
	}
	
	static int[] dx = {1,-1,0,0};
	static int[] dy = {0,0,1,-1};

}

3. 

  • 삼성 SW 검정 시험 A형 기출 문제라고 한다. 근데 A형 중 역대급 쉬운 난이도 문제라 한다.
  • 기본 BFS, DFS를 연습하기 좋은 문제이다. 
  • rain이라는 array를 계속 map과 하나하나 복사하는데, 원래는 clone()이라는 함수를 이용했다. 근데 clone()후 굳어져(?)원하는 결과를 낼 수 없었다 --> clone()에 대한 개념 살피기
  • 배열을 매 반복문마다 실행하니, 메모리 낭비가 클 것 같다. 

'백준 알고리즘(BOJ)' 카테고리의 다른 글

BOJ_17070_파이프 옮기기1  (0) 2021.08.20
BOJ_1987_알파벳  (0) 2021.08.19
BOJ_2667_단지번호 붙이기  (0) 2021.08.18
BOJ_15686_치킨 배달  (0) 2021.08.13
BOJ_2961_도형이가 만든 맛있는 음식  (0) 2021.08.11