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));
}
}
분석
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문으로 순회하자.
Author And Source
이 문제에 관하여(Array - 10. 봉우리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhjcoding/Array-9.-격자판-최대합-tnkiru41저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)