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

윤다정님의 프로필 이미지
윤다정

작성한 질문수

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

10. 봉우리

똑같이 풀었는데 왜 오답이 나오는지 모르겠습니다.

작성

·

150

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운
import java.util.Scanner;

public class Main {
	int[] dx = {-1,0,1,0};
	int[] dy = {0,1,0,-1};
	public int solution(int n, int[][] input) {
		int answer =0;
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				boolean flag = true; // 봉우리 여부
				for(int k=0;k<4;k++) {
					int nx = input[i][j]+dx[k];
					int ny = input[i][j]+dy[k];
					if(nx>=0 && ny>=0 && nx<n && ny<n && input[nx][ny]>=input[i][j]) { 
						flag = false;
						break; 
					}
				}
				if(flag) answer++;
			}
		}
		return answer;
	}
	public static void main(String[] args) {
		Main T = new Main();
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] input = new int[n][n];
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				input[i][j]=sc.nextInt();
			}
		}
		System.out.println(T.solution(n, input));
		sc.close();
		
	}

}
영 관련 문의는 1:1 문의하기를 이용해주세요.
 
무엇이 문제일까요????

답변 1

0

for(int k=0;k<4;k++) {
					int nx = input[i][j]+dx[k];
					int ny = input[i][j]+dy[k];
					if(nx>=0 && ny>=0 && nx<n && ny<n && input[nx][ny]>=input[i][j]) { 
						flag = false;
						break; 
					}

3번째 for문에서는 상,하,좌,우로 탐색을 하시려면

input[i][j] 에 dx나 dy값을 더하는게 아니라 

i 또는 j를 직접적으로 바꿔줘야 위치가 변하므로 

int nx = i + dx[k];

int ny = i + dy[k]; 로 바꿔줘야 할 것 같습니다.

지금 작성해주신코드는 현재 선택된 봉우리값에 dx,dy값을 더하는것이라 위치가 변하지는 않습니다.

윤다정님의 프로필 이미지
윤다정

작성한 질문수

질문하기