인프런 커뮤니티 질문&답변
봉우리 문제 질문있습니다. 강의와 다르게 풀어서 맞았는데 확장성? 이나 활용도에서 문제가 발생하는지 궁금합니다.
작성
·
418
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 
- 먼저 유사한 질문이 있었는지 검색해보세요. 
- 서로 예의를 지키며 존중하는 문화를 만들어가요. 
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요! 
강의듣기 전에 풀이해본 내용인데요! 관련해서 질문이 있습니다!
아래 코드 처럼 풀었는데,
- 경계값을 해주는걸 solution 내부 함수에서 해주는게 아니고, 입력값에서 배열 사이즈 조정하는걸로 풀면 다른 활용문제에서 어떤 문제가 발생할지 궁금합니다! 
- 저는 행, 열에 각각 +1, -1 해주면서 찾았는데, 이렇게 하면 강의에서 말씀하신 대각선 값 비교할때 문제가 있을까요? - 대각선의 경우 분기처리할때 각행과 열에 (-1, +1 ) (-1, -1) (+1, +1), (+1, -1)추가해서 체크해주는게 다른 활용 문제에서 어떤 문제가 발생할지 궁금합니다! 문제는 없지만 비효율적이고 가독성이 안좋아서 그런걸까요? 
- 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
안녕하세요^^
- 나중에 DFS, BFS 등 난이도 있는 문제를 하다보면 영상처럼 경계값 확인을 자주 해야 하니 영상처럼 하셨으면 좋겠습니다. 
- 1번과 같은 내용입니다. 만약 대각성까지 8방향을 탐색한다면 if문 안에 8개의 조건을 걸아야 해 가독성에서 좋지 않습니다. 영상의 방법을 추천합니다. 
- 3중 for문 이지만 제일 안쪽은 4번의 반복으로 정해져 있어 상수시간으로 봐야 합니다. 시간복잡도는 님의 코드나 영상의 코드는 큰 차이점은 없습니다. 






