이중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));
}
}
'Algorithm > 문제' 카테고리의 다른 글
24. 멘토링 ★★★ (0) | 2023.07.18 |
---|---|
23. 임시반장 정하기 (0) | 2023.06.27 |
21. 격자판 최대합 (1) | 2023.06.22 |
20. 등수 구하기 (0) | 2023.06.22 |
19. 점수계산 (0) | 2023.06.14 |