Algorithm/문제
22. 봉우리
챛채
2023. 6. 27. 15:57


이중for문 사용 상,하,좌,우 비교했을 때 큰 값 없으면 count ++
방향 배열
int [] dx ={-1,0,1,0}
int [] dy ={0,1,0,-1}
nx = i+dx[k]
ny = i+dy[k]
경계선 처리는 어떻게 하는가?
1행1열(5)인 경우 가장자리까지 비교를 해버리면 ArrayIndexOutOfBoundsException 에러 발생
0번 인덱스까지 존재하는데 -1번 인덱스까지 본 경우
nx >= 0 && nx < n && ny >= 0 && ny < n
if 문에 코드 추가 경계선 처리를 먼저 확인 한 후 봉우리 확인을 해야하기 때문에 앞쪽에다 추가해준다.
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public int solution(int n, int[][] arr) {
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
int answer=0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
boolean flag=true;
//12시, 3시, 9시, 6시 탐색
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] >= arr[i][j]) {
flag = false; //봉우리가 아님
break;
}
}
//봉우리인지 아닌지 확인 count
if(flag) answer++;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
int[][] arr =new int [n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j]=kb.nextInt();
}
}
System.out.print(T.solution(n, arr));
}
}