작성
·
256
·
수정됨
0
package array;
import java.util.Arrays;
import java.util.Scanner;
public class Peaks_10 {
static int solution(int n, int[][] arr) {
int cnt = 0;
for(int i=1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
int target = arr[i][j];
// target과 상 하 좌 우 중 큰 값을 찾는 삼항연산자.
int up = target > arr[i-1][j] ? target : arr[i-1][j];
int down = target > arr[i+1][j] ? target : arr[i+1][j];
int left = target > arr[i][j-1] ? target : arr[i][j-1];
int right = target > arr[i][j+1] ? target : arr[i][j+1];
// 상 하 좌 우 모두 target일 경우 cnt 값 증가
if(target == up && target ==down && target == left && target == right) {
cnt++;
}
}
}
return cnt;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n+2][n+2];
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
int num = sc.nextInt();
arr[i][j] = num;
}
}
System.out.println(Peaks_10.solution(n,arr));
}
}
답변 1
0
문제에는 자신의 상하좌우보다 크다면 해당 수가 봉우리 숫자라고 되어 있습니다.
해당 코드에는 target과 크기가 같은 데이터가 target의 상하좌우에 포진되어 있을 경우 봉우리 숫자가 아님에도 불구하고 봉우리 숫자로 취급되는 것으로 보입니다.
따라서 다음과 같이 수정하시는 것을 권장 드립니다.
import java.io.*;
import java.util.*;
public class Peaks_10 {
static int solution(int n, int[][] arr) {
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int target = arr[i][j];
if(target > arr[i - 1][j] && target > arr[i + 1][j] && target > arr[i][j + 1] && target > arr[i][j - 1]){
cnt++;
}
}
}
return cnt;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n + 2][n + 2];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int num = sc.nextInt();
arr[i][j] = num;
}
}
System.out.println(Peaks_10.solution(n, arr));
}
}
저도 그럴 거라고 예상은 했지만 논리적으로 문제는 없어보이는데 결과 값이 이상하더라구요..
심지어 답변 주신대로 if문안에 바로 비교하면 됬는데 괜히 이상하게 코드를 짰네요
답변 감사합니다!