코딩테스트 및 알고리즘
봉우리
영카이브
2023. 12. 17. 17:55
문제 . 지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다.
각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.
입력예시 :
5
5 3 7 2 3
3 7 1 6 1
7 2 5 3 4
4 3 6 4 1
8 7 3 5 2
답 : 10
나의 답변
import java.util.Scanner;
public class Main {
int[] dx= { -1, 0, 1, 0 };
int[] dy= { 0, 1, 0, -1 };
public int solution(int n, int[][] arr) {
int answer = 0;
for(int y=0; y<n; y++) {
for(int x=0; x<n; x++) {
boolean flag=true;
for( int k=0; k<4; k++) {
// 해당 좌표의 상하좌우 좌표값
int nx=dx[k]+x;
int ny=dy[k]+y;
// 봉우리가 아닌 것 먼저 구하기
// ArrayIndexOutOfBoundaryError를 방지 하기위해 nx>=0 && nx<n && ny>=0 && ny<n 먼저 설젇
if( nx>=0 && nx<n && ny>=0 && ny<n && arr[ny][nx]>=arr[y][x]) {
flag=false;
break;
}
}
if(flag) answer++;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n][n];
for (int y = 0; y < n; y++) {
for (int x = 0; x < n; x++) {
arr[y][x] = sc.nextInt();
}
}
System.out.println(T.solution(n, arr));
}
}
상하좌우 배열을 전역변수로 두고 쓰면 좋은 이유는?
- 단순성 및 가독성: 코드가 간결하며, 주어진 문제에 대한 해결 방법이 명확합니다.
- 모듈화: 상하좌우 이동 방향이 배열로 정의되어 있어 코드의 확장성이 좋습니다.
- 코드 재사용: 상하좌우 이동 방향 배열을 재사용하여 코드를 간소화할 수 있습니다.