강의

멘토링

커뮤니티

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

xxoals1021님의 프로필 이미지
xxoals1021

작성한 질문수

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

10. 봉우리

오답 원인을 모르겠습니다..

작성

·

219

0

import java.util.Scanner;

public class Main {

	public static void solution(int n, int[][] numArr) {
		//미리 0을 채워 넣으면 가장 편하겠지만 공간 낭비가 생기니 채워 넣지 않고 풀어보자. 
		int answer = 0;
		boolean chk;
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				chk = true;
				//최상단은 상 검사 불필요, 최하단은 하 검사 불필요 
				//맨 좌측(i==0)은 왼쪽 검사 불필요, 맨 우측(i==n-1)은 오른쪽 검사 불필요 

				int currentNum = numArr[i][j];
				// 맨 위에 자리가 아니라면 위에 항목 검사, 맨 아래 자리가 아니라면 아래 항목 검사 -> 이런 식으로 처리하는게 더 효율적!  
				if(i > 0 && currentNum <= numArr[i-1][j]) chk = false;  
				if(i < n-1 && currentNum <= numArr[i+1][j]) chk = false;  
				if(j > 0 && currentNum <= numArr[i][j-1]) chk = false;  
				if(j > n-1 && currentNum <= numArr[i][j+1]) chk = false;
				
				if(chk) answer ++;
				
			}
		}
		System.out.println(answer);
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] numArr = new int[n][n];
		
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				numArr[i][j] = sc.nextInt();
			}
		}
		solution(n, numArr);
	}
}

봉우리가 아닌 경우 false를 줘서 판별하는 방식으로 해서 
예시 답은 잘 나오는거 같은데 결과는 계속 오답이라고 나와서
원인을 못 찾고 있어서 질문 드립니다! 

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

if(j > n-1 && currentNum <= numArr[i][j+1]) chk = false;

위에 코드에서 오류가 있습니다.

xxoals1021님의 프로필 이미지
xxoals1021

작성한 질문수

질문하기