시간 & 메모리 제한
문제
입력 & 출력
DFS를 이용한 문제풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_1245 {
static int col, row,ans;
static int[][] map;
static boolean[][] visited;
static boolean pick;
//8방 탐색
static int dx[]= {-1,1,0,0,1,1,-1,-1};
static int dy[]= {0,0,-1,1,1,-1,1,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
col = Integer.parseInt(st.nextToken());
row = Integer.parseInt(st.nextToken());
map = new int[col][row];
visited = new boolean[col][row];
for (int i = 0; i < col; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < row; j++) {
map[i][j]=Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
if(!visited[i][j]) {
pick=true;
dfs(i,j);
if(pick)ans++;
}
}
}
System.out.println(ans);
}
private static void dfs(int x, int y) {
visited[x][y]=true;
for (int k = 0; k < 8; k++) {
int xx=x+dx[k];
int yy=y+dy[k];
if(xx<0||yy<0|| xx>=col|| yy>=row)continue;
//꼭대기가 아니면 값을 더하지 않기 위해 사용
if(map[xx][yy]>map[x][y])pick=false;
if(!visited[xx][yy]&&map[xx][yy]==map[x][y]) {
dfs(xx,yy);
}
}
}
}
- 이 문제는 DFS로 문제풀이를 진행하기에 수월합니다.
- 산봉우리가 가장 높은 부분을 찾아서 값을 구하는 DFS 문제입니다.
- 주변이 나보다높은지를 체크해서 꼭대기 인지를 확인해야 합니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_7573 고기잡이(자바) / 브루드포스 (0) | 2021.04.22 |
---|---|
백준_11048 이동하기(자바) / DP (0) | 2021.04.21 |
백준_1520 내리막길(자바) / DFS + DP (0) | 2021.04.19 |
백준_15961 회전 초밥(자바) / 슬라이딩 윈도우 (0) | 2021.04.17 |
백준_14503 로봇 청소기(자바) / 구현 + 재귀 (0) | 2021.04.17 |