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

hyun님의 프로필 이미지
hyun

작성한 질문수

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

9. 격자판 최대합

제 풀이

해결된 질문

작성

·

260

·

수정됨

0

안녕하세요. 선생님 강의 정말 잘 보고 있습니다.

 

저는 for문으로 4개의 합을 한꺼번에 계산했는데 시간복잡도는 O(n^2)로 같으니 괜찮은걸까요?

그리고 알고리즘 공부가 처음이라 시간복잡도를 구글링해서 찾아봤는데.. 원래 강의에서 따로 설명하는 부분이 없는건지 아니면 진도가 좀 더 나가야 설명해주시는건지 궁금합니다~

(split해서 자르지않고 바로 2차배열로 저장할 수 있네요..

스캐너 메소드를 좀 더 공부해야겠습니다.)

 

public class INF0209 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        int[][] grid = new int[n][n];

        for (int i = 0; i < n; i++) {
            String s = sc.nextLine();
            String[] split = s.split(" ");

            for (int j = 0; j < n; j++) {
                grid[i][j] = Integer.parseInt(split[j]);
            }
        }

        INF0209 inf = new INF0209();
        System.out.println(inf.solution(grid, n));
    }

    public int solution(int[][] grid, int n) {
        int max = 0;

        for (int i = 0; i < n; i++) {
            int[] sums = new int[4];

            for (int j = 0; j < n; j++) {
                sums[0] += grid[i][j];
                sums[1] += grid[j][i];
                sums[2] += grid[j][j];
                sums[3] += grid[j][n-j-1];
            }

            //최댓값 구하기
            for (int sum : sums) {
                if(sum > max) {
                    max = sum;
                }
            }
        }
        return max;
    }
}

 

답변 2

0

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

안녕하세요^^

네. 대각선을 여러번 구하는게 조금 신경쓰이지만 괜찮은 코드입니다. 시간복잡도는 제 강의 "입문자를 위한 코딩테스트 핵심(파이썬)" 에 미리 보기로 열어놓았습니다.

hyun님의 프로필 이미지
hyun
질문자

감사합니다!

0

안녕하세요 hyun 님, 인프런 AI 인턴이에요.

for문을 이용하여 4개의 합을 한꺼번에 계산하는 방법을 사용하셨는데, 시간 복잡도가 O(n^2)로 나왔다고 하셨네요. 이 경우에도 문제에 따라서 괜찮을 수도 있습니다. 하지만 보통은 시간 복잡도가 더 효율적인 알고리즘을 선택하는 것이 좋습니다.

알고리즘의 시간 복잡도는 알고리즘의 실행 시간이 입력 크기에 어떻게 영향을 받는지를 나타냅니다. 강의에서 시간 복잡도에 대한 설명이 조금 더 나중에 나올 수도 있으며, 경우에 따라서는 자체적으로 학습해야 할 수도 있습니다. 알고리즘과 시간 복잡도 체계적으로 공부하는 것이 좋습니다.

덧붙여, split() 메소드를 사용하지 않고 바로 2차원 배열에 저장할 수도 있습니다. 각 줄을 읽어서 문자열을 분리하지 않고, 그대로 정수로 변환하여 2차원 배열에 저장하는 방법도 가능합니다.

스캐너 메소드에 대해 공부하시는 것은 좋은 생각입니다. Java에서는 다양한 입력 방법을 제공하기 때문에, 스캐너를 활용하여 편리하게 입력을 받을 수 있습니다.

프로그래밍에 대한 궁금한 점이나 도움이 필요하신 부분이 있다면 언제든지 물어보세요. 감사합니다!

hyun님의 프로필 이미지
hyun

작성한 질문수

질문하기