본문 바로가기
알고리즘/문자열, 정렬

[알고리즘] 격자판 최대합 with Java, 이중 for문

by VIPeveloper 2022. 3. 5.
반응형

오늘 배운 것

1. 문제 풀이

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int i = kb.nextInt();
        int[][] arr = new int[i][i];
        for (int j = 0; j < arr.length; j++) {
            for (int k = 0; k < arr.length; k++) {
                arr[j][k] = kb.nextInt();
            }
        }
        solution(i,arr);
    }

    private static void solution(int i, int[][] arr) {
        ArrayList<Integer> answer = new ArrayList<>();

        for (int j = 0; j < arr.length; j++) {
            int tmp = 0;
            for (int k = 0; k < arr.length; k++) {
                tmp += arr[j][k];
            }
            answer.add(tmp);
        }

        for (int j = 0; j < arr.length; j++) {
            int tmp = 0;
            for (int k = 0; k < arr.length; k++) {
                tmp += arr[k][j];
            }
            answer.add(tmp);
        }

        int tmp = 0;
        for (int j = 0; j < arr.length; j++) {
            tmp += arr[j][j];
        }
        answer.add(tmp);

        tmp = 0;
        for (int j = 0; j < arr.length; j++) {
            tmp += arr[j][arr.length-1-j];
        }
        answer.add(tmp);

        int max_num = -1;
        for (int j = 0; j < answer.size(); j++) {
            if(max_num < answer.get(j)){
                max_num = answer.get(j);
            }
        }

        System.out.println(max_num);
    }
}

. 강의에서는 더 깔끔하게 풀었다. 4단계 -> 2단계로 줄이셨음.

private static void solution2(int i, int[][] arr) {
    int sum1,sum2;
    int answer = -1;
    for (int j = 0; j < arr.length; j++) {
        sum1=sum2=0;
        for (int k = 0; k < arr.length; k++) {
            sum1+=arr[j][k];
            sum2+=arr[k][j];
        }
        answer = Math.max(answer,sum1);
        answer = Math.max(answer,sum2);
    }
    sum1=sum2=0;
    for (int j = 0; j < arr.length; j++) {
        sum1+=arr[j][j];
        sum2+=arr[j][arr.length-1-j];
    }
    answer = Math.max(answer,sum1);
    answer = Math.max(answer,sum2);

    System.out.println(answer);
}
반응형