Array - 10. 봉우리

답안

import java.util.Scanner;
class Main {
	public int solution(int n, int[][] arr) {
		
		int answer = 0;
		
		for(int i=1; i<=n; i++){
			for(int j=1; j<=n; j++){
				int lt = arr[i][j-1];
				int rt = arr[i][j+1];
				int tp = arr[i-1][j];
				int bt = arr[i+1][j];
				
				if(arr[i][j] > lt && arr[i][j] > rt
						&& arr[i][j] > tp && arr[i][j] > bt){
					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+2][n+2];
		for(int i=1; i<=n; i++){
			for(int j=1; j<=n; j++){
				arr[i][j] = kb.nextInt();
			}
		}
		System.out.print(T.solution(n, arr));
		
	}
}

해설

import java.util.Scanner;
class Main {
	// 어차피 solution 메서드 내부에서만 접근하므로 static으로 선언 할 필요 필요없다.
	int[] dx={-1, 0, 1, 0};
	int[] dy={0, 1, 0, -1};
	
	public int solution(int n, int[][] arr) {
		int answer = 0;
		
		for(int i=0; i<n; i++){
			for(int j=0; j<n; j++){
				
				// 이렇게 일일히 찾지 않고 dx, dy를 두어야 상하좌우 이상으로 범위가 더 넓어질 경우에도 활용 가능
//				int lt = arr[i][j-1];
//				int rt = arr[i][j+1];
//				int tp = arr[i-1][j];
//				int bt = arr[i+1][j];
				

				boolean flag = true;
				for(int k=0; k<4; k++){
					// 행 좌표 
					int nx = i+dx[k];
					// 열 좌표
					int ny = j+dy[k];
					
					// 경계선 처리(IndexOutOfBounds 예외 처리)
					// arr[nx][ny] >= arr[i][j] && nx>=0 && nx<n && ny>=0 && ny<n 으로 작성하면
					// arr[nx][ny] >= arr[i][j]가 먼저 연산되므로 IndexOutOfBounds 예외 발생 
					if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny] >= arr[i][j]) {
						flag =false;
						break;
					}
				}
				
				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));
		
	}
}

분석

dx, dy를 두어서 3중 for문으로 순회하자.

좋은 웹페이지 즐겨찾기