본문 바로가기
Coding Test/SWEA 풀이

[SWEA] 1209. Sum : D3 (java)

by CSEGR 2024. 11. 16.
728x90

✔️ 문제 설명

[문제 바로 가기]

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

✔️ 문제 풀이

이 문제를 풀 때,

1. 각 행 / 각 열 / 대각선 "\" / 대각선 "/" 합을 어떻게 저장할까?

2. 꼭 입력값들을 배열에 저장해야할까? 바로바로 합을 구하는 방법은 없을까..?

이 두가지 고민을 한 후, 입력 받을 때 마다 위치에 따라서 합을 더하자!! 라는 결론이 났다. 

 

내가 생각해낸 방식은 아래와 같다. 

5x5 배열의 경우, 행과 열의 합인 10과 대각선 두 개로 총 12개의 합을 저장해야한다.

그림으로 이해하면 쉽다.

정리하자면, 

각 행의 합은 배열 sum의 앞에서 부터 저장하고, 

각 열의 합은 배열 sum의 뒤에서 부터 저장한다.

그리고 각 대각선의 합도 저장해야되니, 총 행과 열의 합인 200 + 대각선 두 개 = 총 202개의 합을 저장해야된다. 

	for(int j = 0; j< 100; j++){
                st = new StringTokenizer(br.readLine());
                for(int k = 0; k<100; k++){
                    int num = Integer.parseInt(st.nextToken());
                    
                    sum[j] += num; //각 행
                    sum[200-k] += num; //각 열
                    if(j == k) sum[100] += num; // 대각선 " \ "
                    if( j +k  == 99) sum[201] += num; // 대각선 " / "
                }
            }

 

최대값은 하나하나 비교할 수 있지만, 그냥 Arrays의 sort 함수를 쓴 후 마지막 인덱스 값을 뽑아냈다. 

Arrays.sort(sum);
System.out.printf("#%d %d\n", i+1, sum[201]);

 

[실행 결과]

[코드]

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

class Solution
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int[] sum = new int[202];
        for(int i = 0; i < 10; i++){
            br.readLine(); //테스트케이스 번호 읽기
            Arrays.fill(sum, 0); //배열 0으로 초기화
            
            for(int j = 0; j< 100; j++){
                st = new StringTokenizer(br.readLine());
                for(int k = 0; k<100; k++){
                    int num = Integer.parseInt(st.nextToken());
                    
                    sum[j] += num; //각 행
                    sum[200-k] += num; //각 열
                    if(j == k) sum[100] += num; // 대각선 " \ "
                    if( j +k  == 99) sum[201] += num; // 대각선 " / "
                }
            }
            Arrays.sort(sum);
            System.out.printf("#%d %d\n", i+1, sum[201]);
        }
    }
}
728x90