삐까냥의 파도타기
2468번) 안전 영역 본문
문제 출처 : https://www.acmicpc.net/problem/2468
무려 초등부 문제!!
힌트를 주자면, 모든 영역의 높이가 동일할 경우도 생각해야 하네요.
2018년 4월 10일 - 다듬지 않은 코드 (소요시간 38분) import java.util.Scanner; public class Q2468 { static int[][] map, newMap; static int size; static int result = 1; public static void main(String[] args) { Scanner sc = new Scanner(System.in); size = sc.nextInt(); map = new int[size][size];
int min = 0, max = 0; for (int i = 0 ; i < size; i++) { for (int j = 0; j < size; j++) { int tempHigh = sc.nextInt(); map[i][j] = tempHigh;
if (min == 0 && max == 0) { min = tempHigh; max = tempHigh; } else if (min > tempHigh) { min = tempHigh; } else if (max < tempHigh) { max = tempHigh; } } }
for (int i = min; i < max; i++) { searchArea(i); } System.out.println(result); }
static void searchArea(int rain) { newMap = new int[size][size];
//안잠기는 지역 파악 for (int i = 0 ; i < size; i++) { for (int j = 0 ; j < size; j++) { int height = map[i][j]; if (height > rain) { newMap[i][j] = 1; } } }
//안전한 영역 검색 (플러딩) int areaNum = 1; for (int i = 0 ; i < size; i++) { for (int j = 0 ; j < size; j++) { if (newMap[i][j] == 1) { areaNum += 1; checkMap(i, j); } } }
areaNum -= 1; if (result < areaNum) { result = areaNum; } }
static void checkMap(int y, int x) { newMap[y][x] = 2;
//상 if (0 <= y-1 && newMap[y-1][x] == 1) { checkMap(y-1, x); }
//하 if (y+1 < size && newMap[y+1][x] == 1) { checkMap(y+1, x); }
//좌 if (0 <= x-1 && newMap[y][x-1] == 1) { checkMap(y, x-1); }
//우 if (x+1 < size && newMap[y][x+1] == 1) { checkMap(y, x+1); } } } |
'코딩 > 백준 알고리즘' 카테고리의 다른 글
1600번) 말이 되고픈 원숭이 (0) | 2018.04.11 |
---|---|
1939번) 통나무 옮기기 (0) | 2018.04.10 |
11403번) 경로 찾기 (0) | 2017.11.14 |
1697번) 숨바꼭질 (0) | 2017.11.14 |
1260번) DFS와 BFS (0) | 2017.11.14 |