문제
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정합니다.
만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.
▣ 입력설명
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
▣ 출력설명
봉우리의 개수를 출력하세요.
▣ 입력예제 1
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
▣ 출력예제 1
10
풀이
전에 풀었던 문제에서 좌표 쓰는 방식 알려주신게 생각나서 그걸 사용해 풀었다.
이번에는 그냥 배열을 입력받을 때 0까지 넣어서 짰는데
int nx = i+dx[k];
int ny = j+dy[k];
if(board[i][j] < board[nx][ny] && nx>=0 && nx<n) {
return false;
}
고냥 이렇게 해버리면 되는 게 강의듣고 생각 났따 ~
코드
import java.util.Scanner;
public class Main {
static int[] dx = {-1, 0, 1, 0};
static int[] dy= {0, 1, 0, -1};
static int[][] board;
public static boolean isPeak(int i, int j) {
//dx dy 순회
for(int k=0; k<4; k++) {
if(board[i][j] < board[i+dx[k]][j+dy[k]]) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
board = new int[n+2][n+2];
int answer = 0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
board[i][j] = in.nextInt();
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(isPeak(i,j) == true) answer++;
}
}
System.out.print(answer);
}
}
'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글
[PS] 인프런 강의 - Arrays 12. 멘토링 (0) | 2022.10.21 |
---|---|
[PS] 인프런 강의 - Array 11. 임시반장 정하기 (0) | 2022.10.20 |
[PS] 인프런 강의 - Array 9. 격자판 최대합 (0) | 2022.10.18 |
[PS] 인프런 강의 - Array 8. 등수구하기 (0) | 2022.10.18 |
[PS] 인프런 강의 - Array 7. 점수계산 (0) | 2022.10.18 |