<섹션2-ARRAY> 10. 봉우리

조이·2021년 7월 28일
0

자바 알고리즘

목록 보기
22/41
post-thumbnail

10. 봉우리

<설명>

지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다.

<입력>

첫 줄에 자연수 N이 주어진다.(2<=N<=50) 두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.

<출력>

봉우리의 개수를 출력하세요.

===================================================

<코드>

1) if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]) 을 사용하여 크기를 비교하여 배열 안에 있는 값만을 이용하여 비교 후 boolean을 이용하여 값을 구한다.

import java.util.Scanner;

public class Main {


	public int solution(int size,int[][] array) {
		int answer=0;    
		int[] dx= {-1,0,1,0};
		int[] dy= {0,1,0,-1};
		
		for(int i=0;i<size;i++) {
			for(int j=0;j<size;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<size && ny>=0 && ny<size && array[nx][ny]>=array[i][j]) {
						flag=false;
						break;
					}
				}
				if(flag) answer++;
			}
		}
	
		return answer;
	}
	
	
	
	
	public static void main(String[] args) {
		Main main = new Main();
		Scanner scan = new Scanner(System.in);
	    int size=scan.nextInt();
	    int[][] array=new int[size][size];
	    
	    for(int i=0;i<size;i++) {
	    	for(int j=0;j<size;j++) {
	    		array[i][j]=scan.nextInt();
	    	}
	    }

	    
	    System.out.println(main.solution(size,array));
	    
  }
}

2) 처음부터 배열의 크기를 2 크게 만들어 주변을 0으로 만든다. 그 후 상,하,좌,우를 비교하여 값을 구한다.

import java.util.Scanner;

public class Main {
	public int solution(int size,int[][] array) {
		int answer=0;    
		for(int i=1;i<=size;i++) {
			for(int j=1;j<=size;j++) {
				if(array[i][j]>array[i-1][j]&& array[i][j]>array[i+1][j]&&
						array[i][j]>array[i][j+1]&& array[i][j]>array[i][j-1]) {
					answer++;
				}
			}
		}
		

		return answer;
	}
	
	
	public static void main(String[] args) {
		Main main = new Main();
		Scanner scan = new Scanner(System.in);
	    int size=scan.nextInt();
	    int[][] array=new int[size+2][size+2];
	    
	    for(int i=1;i<=size;i++) {
	    	for(int j=1;j<=size;j++) {
	    		array[i][j]=scan.nextInt();
	    	}
	    }
	    
        System.out.println(main.solution(size,array));
	    }
}
profile
joy_study

0개의 댓글