문제 풀이 (JAVA)
import java.util.*;
public class part2_10 {
public static void main(String[] args) {
// 봉우리
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int [][] numArr = new int[n][n];
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
numArr[i][j] = input.nextInt();
}
}
int answer=solution(numArr, n);
System.out.print(answer);
}
private static int solution(int [][] arr, int n) {
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;
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;
}
}
if(flag) answer++;
}
}
return answer;
}
}
주요 핵심 포인트
1. 이차원 배열의 숫자가 왼쪽,오른쪽,위,아래 배열 숫자 중 가장 큰 수인지를 탐색하는 문제로, 키워드는 사면에 배열이 있을수도 있고 없을수도 있으므로, 존재하지 않는 행은 체크하지 않아야 한다.
2. 문제풀이의 핵심은 dx, dy 배열을 만들어 중앙값을 기준으로 (-1,0),(0,1),(1,0),(0,-1)이 존재할때에 탐색하도록 삼중 for문을 돌린다. 이차원 배열의 각 숫자를 사면으로 k번 비교하여 비교 숫자가 더 크면 flag는 false로 가장 큰 숫자가 아니게 된다따라서 각 배열의 숫자 flag가 변하지 않고 true 라면 봉우리이다.
3. nx , ny 값 범위를 잘 설정하여야 존재하는 배열만 탐색한다.
'알고리즘' 카테고리의 다른 글
[해쉬맵] 학급 회장(해쉬) (인프런 알고리즘 4-1) (0) | 2022.06.12 |
---|---|
[투포인터+슬라이딩윈도우] 최대 길이 연속부분수열 (인프런 알고리즘 3-6) (0) | 2022.06.12 |
[투포인터+슬라이딩윈도우] 연속된 자연수의 합 (인프런 알고리즘 3-5) (0) | 2022.06.12 |
[슬라이딩윈도우] 최대 매출 (인프런 알고리즘 3-3) (0) | 2022.06.12 |
[투포인터] 공통원소 구하기 (인프런 알고리즘 3-2) (0) | 2022.06.12 |