10. 봉우리
봉우리 지역이 몇 개 있는 지 알아내는 프로그램
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다.
각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다.
격자의 가장자리는 0으로 초기화 되었다고 가정합니다.
입력) 첫 줄에 자연수 N(2<=N<=50)이 주어집니다.
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어집니다. 각 자연수는 100을 넘지 않습니다.
출력) 봉우리의 개수를 출력합니다.
1.
import java.util.Scanner;
public class Main {
public static int solution(int n, int[][] arr) {
int answer = 0;
int[] dx = {-1, 0, 1, 0}; // direction x
int[] dy = {0, 1, 0, -1}; // direction y
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
boolean isPeak = true; //flag
for (int k=0; k<4; k++) { // 네 방향
int x = i + dx[k]; // 행
int y = j + dy[k]; // 열
if (x>=0 && x<n && y>=0 && y<n && arr[x][y]>=arr[i][j]) {
isPeak = false;
break;
}
}
if (isPeak) answer++;
}
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] arr = new int[n][n];
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println(solution(n, arr));
}
}
// x>=0 && x<n && y>=0 && y<n : ArrayIndexOutOfBoundsException 방지
2.
import java.util.Scanner;
public class Main {
public static int solution(int n, int[][] arr) {
int answer = 0;
for (int i=1; i<n-1; i++) {
for (int j=1; j<n-1; j++) {
// 상 하 좌 우
if (arr[i][j]>arr[i-1][j] && arr[i][j]>arr[i+1][j]
&& arr[i][j]>arr[i][j-1] && arr[i][j]>arr[i][j+1]) answer++;
}
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
n += 2;
int[][] arr = new int[n][n];
for (int i=1; i<n-1; i++) {
for (int j=1; j<n-1; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println(solution(n, arr));
}
}
결과
댓글