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

세진:)님의 프로필 이미지
세진:)

작성한 질문수

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

10. 봉우리

봉우리 문제 질문있습니다. 강의와 다르게 풀어서 맞았는데 확장성? 이나 활용도에서 문제가 발생하는지 궁금합니다.

작성

·

350

·

수정됨

0

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

 

안녕하세요!
강의듣기 전에 풀이해본 내용인데요! 관련해서 질문이 있습니다!

 

아래 코드 처럼 풀었는데,

  1. 경계값을 해주는걸 solution 내부 함수에서 해주는게 아니고, 입력값에서 배열 사이즈 조정하는걸로 풀면 다른 활용문제에서 어떤 문제가 발생할지 궁금합니다!

  2. 저는 행, 열에 각각 +1, -1 해주면서 찾았는데, 이렇게 하면 강의에서 말씀하신 대각선 값 비교할때 문제가 있을까요?

    대각선의 경우 분기처리할때 각행과 열에 (-1, +1 ) (-1, -1) (+1, +1), (+1, -1)추가해서 체크해주는게 다른 활용 문제에서 어떤 문제가 발생할지 궁금합니다! 문제는 없지만 비효율적이고 가독성이 안좋아서 그런걸까요?

  3. 3중 포문으로 하면 시간복잡도가 O(n^3)가 되서 성능이 떨어지는거 아닌지 궁금합니다. 아래 코드로 하면 O(n^2)이라서 더 빠를 것 같았는데 강의로 알려주신 코드보다 12ms 더 느리더라구요!

import java.util.Scanner;

public class Main {
    public int solution(int n, int[][] arr){
        int answer = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                int tmp = arr[i][j];
                 // 첫째줄 조건은 열 체크. 둘째줄 조건은 행 체크
                if (tmp > arr[i][j+1] && tmp > arr[i][j-1]
                && tmp > arr[i+1][j] && tmp > arr[i-1][j]) {
                    answer ++;
                }
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        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++) {
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.println(T.solution(n,arr));
    }
}

답변 1

0

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

안녕하세요^^

  1. 나중에 DFS, BFS 등 난이도 있는 문제를 하다보면 영상처럼 경계값 확인을 자주 해야 하니 영상처럼 하셨으면 좋겠습니다.

  2. 1번과 같은 내용입니다. 만약 대각성까지 8방향을 탐색한다면 if문 안에 8개의 조건을 걸아야 해 가독성에서 좋지 않습니다. 영상의 방법을 추천합니다.

  3. 3중 for문 이지만 제일 안쪽은 4번의 반복으로 정해져 있어 상수시간으로 봐야 합니다. 시간복잡도는 님의 코드나 영상의 코드는 큰 차이점은 없습니다.

세진:)님의 프로필 이미지
세진:)

작성한 질문수

질문하기