https://www.acmicpc.net/problem/1245
풀이
사용한 알고리즘: BFS
풀이전략
1. 주어진 입력을 2차원 배열에 작성한다.
2. (0,0)에서 (N-1,M-1)까지 각각의 인덱스를 BFS 탐색한다.
3. 특정 인덱스에서 주변에 인접한 모든 방향 탐색 중,
작성한 2차열 배열 인덱스를 넘어서지않고, 방문하지 않았으며 그래프상 같은 수를 가진 경우
방문처리하고 해당 인덱스를 Inqueue한다.
4. BFS 탐색 중 그래프상 인접한 값이, 현재 인덱스에서의 그래프상 큰 값이 하나라도 있으면
산봉우리 후보에서 탈락시킨다.
제출코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int N,M;
static int graph[][];
static boolean visited[][];
static int dx[]={-1,-1,0,1,1,1,0,-1};
static int dy[]={0,1,1,1,0,-1,-1,-1};
static boolean condition;
static class Pos{
int x;
int y;
public Pos(int x,int y){
this.x=x;
this.y=y;
}
}
static void bfs(int x,int y){
Queue<Pos> q = new LinkedList<>();
q.offer(new Pos(x,y));
visited[x][y]=true;
while(!q.isEmpty()){
Pos now = q.poll();
for(int i=0;i<8;++i){
int mx=now.x+dx[i];
int my=now.y+dy[i];
if(mx>=0 && mx<N && my>=0 && my<M){
if(graph[now.x][now.y]<graph[mx][my]){
condition=false;
}
if(!visited[mx][my] && graph[now.x][now.y]==graph[mx][my]){
visited[mx][my]=true;
q.offer(new Pos(mx,my));
}
}
}
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N=Integer.parseInt(st.nextToken());
M=Integer.parseInt(st.nextToken());
graph=new int[N][M];
visited=new boolean[N][M];
for(int i=0;i<N;++i){
st=new StringTokenizer(br.readLine());
for(int j=0;j<M;++j){
graph[i][j]=Integer.parseInt(st.nextToken());
}
}
int resultCount=0;
for(int i=0;i<N;++i){
for(int j=0;j<M;++j){
if(!visited[i][j]){
condition=true;
bfs(i,j);
if(condition) ++resultCount;
}
}
}
System.out.println(resultCount);
}
}
'알고리즘||코딩테스트 > 백준' 카테고리의 다른 글
[백준 1351번] 무한 수열 - JAVA (0) | 2023.08.07 |
---|---|
[백준 1149번] RGB거리 - JAVA (0) | 2023.08.06 |
[백준 1926번] 그림 - JAVA (0) | 2023.08.05 |
[백준 1182번] 부분수열의 합 - JAVA (0) | 2023.07.31 |
[백준 11725번] 트리의 부모 찾기 - JAVA (0) | 2023.07.31 |