CS 기초/알고리즘 · 문제풀이

[JAVA] Array(1, 2차원 배열) - 격자판 최대합 / 봉우리

sofiaaa 2022. 3. 5. 12:11

 격자판 최대합

 

내 코드 (정답) - 하

 

Time: 228ms Memory: 31MB

import java.util.*;

public class Main {
    public Integer solution(int n, int[][] arr){
        Integer answer = 0;

        // 00 01 02 03 04
        // 10 11 12 13 14
        // 20 21 22 23 24
        // 30 31 32 33 34
        // 40 41 42 43 44

        List<Integer> list1 = new ArrayList<>();

        int total3 = 0; // 오른쪽 대각선
        int total4 = 0; // 왼쪽 대각선
        for(int i =0 ; i< n; i++){
            int total1 = 0; // 가로 합
            int total2 = 0; // 세로 합
            total3 = total3 + arr[i][i];
            for(int j = 0; j < n ; j++){
                total1 = total1 + arr[i][j];
                total2 = total2 + arr[j][i]; // 00 10 20 30 40 // 01 11 21 31 41
                if(i + j == 4){
                    total4 = total4 + arr[i][j];
                }
            }
            list1.add(total1);
            list1.add(total2);
        }
        list1.add(total3);
        list1.add(total4);
        
        int Max = list1.get(0);

        for(int i =0; i < list1.size(); i++){
            if(list1.get(i) > Max){
                Max = list1.get(i);
            }
        }

        answer = Max;

        return answer;
    }

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

        System.out.print(T.solution(n, arr));
    }
}

 

정답 코드 

Math.max(int, int) 로 계속 비교를 하면서 정답을 찾아간 코드이다.

 

import java.util.*;
class Main {	
	public int solution(int n, int[][] arr){
		int answer=-2147000000;
		int sum1=0, sum2=0;
		for(int i=0; i<n; i++){
			sum1=sum2=0;
			for(int j=0; j<n; j++){
				sum1+=arr[i][j];
				sum2+=arr[j][i];
			}
			answer=Math.max(answer, sum1);
			answer=Math.max(answer, sum2);
		}
		sum1=sum2=0;
		for(int i=0; i<n; i++){
			sum1+=arr[i][i];
			sum2+=arr[i][n-i-1];
		}
		answer=Math.max(answer, sum1);
		answer=Math.max(answer, sum2);
		return answer;
	}

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

 

 

 봉우리

 

 

반응형