공부하는 히욤이

[SWEA] 1209. Sum 본문

Algorithm/SW Expert Academy

[SWEA] 1209. Sum

히욤이 2019. 4. 10. 23:27

SW Expert 1209. Sum

 

* 문제의 저작권은 SW Expert에 있습니다.

 

 

 

 

 

 

[문제 접근]

 

가로, 세로 , 대각선 각각 구한 후 arraylist에 넣어서 max로 최대값 구함

\ 대각선은 i,j가 같은 경우 더하기

/ 대각선의 좌표는 x,y 좌표의 합이 행 보다 하나 작다는 것을 알아냄

 

 

 

 

 

 

[코드]

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution_1209 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        for (int test_case = 1; test_case <= 10; test_case++) {
            br.readLine();
            int[][] map = new int[100][100];

            for (int i = 0; i < 100; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < 100; j++) {
                    map[i][j] = Integer.parseInt(st.nextToken());
                }
            }

            ArrayList<Integer> list = new ArrayList<Integer>(); //합을 담을 리스트    
            
            int rdsum = 0; // \대각선 합
            int ldsum = 0; // /대각선 합
            for (int i = 0; i < 100; i++) {
                int rowsum = 0; //가로 열 합
                int colsum = 0; //세로 열 합
                for (int j = 0; j < 100; j++) {
                    rowsum = rowsum +map[i][j];
                    colsum = colsum+ map[j][i];
                    if (i == j) {
                        rdsum = rdsum + map[i][j];
                    }
                }
                
                for (int j = map.length-1; j >= 0; j--) {
                    if (i+ j == map.length-1) {
                        ldsum = ldsum + map[i][j];
                    }
                }
                list.add(rowsum);
                list.add(colsum);
            }
            list.add(rdsum);
            list.add(ldsum);
            
            int max = 0;
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i)>max) {
                    max = list.get(i);
                }
            }

            System.out.println("#"+test_case + " " + max);
        }
    }
}

 

 

<처음 풀었던 코드>

각 행 합의 값을 바로 max값과 비교해서 구함

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[][] arr = new int[100][100]; //2차원 배열

        StringTokenizer st;
        for (int test_case = 1; test_case <= 10; test_case++) {
            br.readLine(); //test_case 읽어 줌

            for (int i = 0; i < arr.length; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < arr.length; j++) {
                    arr[i][j] = Integer.parseInt(st.nextToken()); //배열에 값 삽입
                }
            }

            int rowcnt; //가로 합
            int colcnt; //세로 합
            int dae1cnt = 0; // /대각선 합
            int dae2cnt = 0; // \대각선 합
            int max = 0; //최대값
            
            
            for (int i = 0; i < arr.length; i++) { //배열크기 만큼 돌림
                rowcnt = 0;
                colcnt = 0;
                
                for (int j = 0; j < arr.length; j++) {
                    if (i == j) { // \대각선의 합을 구하는 조건 : i,j가 같음
                        dae1cnt += arr[i][j]; // \대각선의 합
                        if (max<dae1cnt) { //max값과 비교
                            max = dae1cnt;
                        }
                    }
                    if (i+j == arr.length-1) {// /대각선의 합을 구하는 조건 : i+j는 배열 크기의 -1과 같음
                        dae2cnt += arr[i][j]; // /대각선의 합
                        if (max <dae2cnt) {
                            max = dae2cnt;
                        }
                    }
                    rowcnt += arr[i][j]; // 가로의 합
                    if (max<rowcnt) {
                        max = rowcnt;
                    }
                    colcnt += arr[j][i]; //세로의 합
                    if (max <colcnt) {
                        max = colcnt;
                    }
                }
            }
            System.out.println("#" + test_case + " " + max);
        }
    }
}

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[SWEA] 1486. 장훈이의 높은 선반  (0) 2019.08.23
[SWEA] 7829. 보물왕 태혁  (0) 2019.08.23
1219. 길찾기  (0) 2019.04.06
1226. 미로1  (0) 2019.04.05
4299. 태혁이의 사랑은 타이밍  (5) 2019.03.05