10. 봉우리
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다.
첫 줄에 자연수 N이 주어진다.(2<=N<=50) 두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
봉우리의 개수를 출력하세요.
===================================================
1) if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]) 을 사용하여 크기를 비교하여 배열 안에 있는 값만을 이용하여 비교 후 boolean을 이용하여 값을 구한다.
import java.util.Scanner;
public class Main {
public int solution(int size,int[][] array) {
int answer=0;
int[] dx= {-1,0,1,0};
int[] dy= {0,1,0,-1};
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
boolean flag=true;
for(int k=0;k<4;k++) {
int nx=i+dx[k];
int ny=j+dy[k];
if(nx>=0 && nx<size && ny>=0 && ny<size && array[nx][ny]>=array[i][j]) {
flag=false;
break;
}
}
if(flag) answer++;
}
}
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner scan = new Scanner(System.in);
int size=scan.nextInt();
int[][] array=new int[size][size];
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
array[i][j]=scan.nextInt();
}
}
System.out.println(main.solution(size,array));
}
}
2) 처음부터 배열의 크기를 2 크게 만들어 주변을 0으로 만든다. 그 후 상,하,좌,우를 비교하여 값을 구한다.
import java.util.Scanner;
public class Main {
public int solution(int size,int[][] array) {
int answer=0;
for(int i=1;i<=size;i++) {
for(int j=1;j<=size;j++) {
if(array[i][j]>array[i-1][j]&& array[i][j]>array[i+1][j]&&
array[i][j]>array[i][j+1]&& array[i][j]>array[i][j-1]) {
answer++;
}
}
}
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner scan = new Scanner(System.in);
int size=scan.nextInt();
int[][] array=new int[size+2][size+2];
for(int i=1;i<=size;i++) {
for(int j=1;j<=size;j++) {
array[i][j]=scan.nextInt();
}
}
System.out.println(main.solution(size,array));
}
}