• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

테스트 케이스 10, 20 은 맞는데 30부터오답이에요

23.10.16 19:59 작성 23.10.16 19:59 수정 조회수 198

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

sehunkim님의 프로필

sehunkim

2023.10.18

문제에는 자신의 상하좌우보다 크다면 해당 수가 봉우리 숫자라고 되어 있습니다.

해당 코드에는 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));
  }
}
이주용님의 프로필

이주용

질문자

2023.10.18

저도 그럴 거라고 예상은 했지만 논리적으로 문제는 없어보이는데 결과 값이 이상하더라구요..

심지어 답변 주신대로 if문안에 바로 비교하면 됬는데 괜히 이상하게 코드를 짰네요

답변 감사합니다!