문제 풀이 (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 값 범위를 잘 설정하여야 존재하는 배열만 탐색한다.

+ Recent posts