inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

10. 봉우리

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

305

이주용

작성한 질문수 14

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));

	}

}

java 코딩-테스트

답변 1

0

sehunkim

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

해당 코드에는 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));
  }
}

0

이주용

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

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

답변 감사합니다!

 

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

28

1

갑자기 채점 사이트가 바뀌었어요

0

32

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

23

1

봉우리 문제 질문입니다

0

81

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

64

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

45

1

강의 수강후 코딩테스트

0

110

1

answer 변수 사용 여부

0

45

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

62

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

56

1