인프런 커뮤니티 질문&답변

이주용님의 프로필 이미지
이주용

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

10. 봉우리

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

작성

·

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문안에 바로 비교하면 됬는데 괜히 이상하게 코드를 짰네요

답변 감사합니다!

 

이주용님의 프로필 이미지
이주용

작성한 질문수

질문하기