노력만이 살길!/알고리즘

[JAVA][SWEA] 2805 농작물 수확하기

갱스타 2022. 2. 26. 00:46

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB 

 

SW Expert Academy

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

swexpertacademy.com

[제약 사항]

농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)

농작물의 가치는 0~5이다.


[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.


[출력]

각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

이런 문제는 무조건 구역을 나누는게 정석!

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

public class Solution{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(br.readLine());
        int T=Integer.parseInt(st.nextToken());
        for (int tc = 1; tc <= T; tc++) {
            st=new StringTokenizer(br.readLine());
            int N=Integer.parseInt(st.nextToken());
            int[][] map=new int[N][N];
            int sumsum=0;
            for (int i = 0; i < N; i++) {
                String line=br.readLine();
                for (int j = 0; j < N; j++) {
                    map[i][j]=Integer.parseInt(String.valueOf(line.charAt(j)));
                    sumsum+=map[i][j];
                }
            }
            if(N==1){
                System.out.printf("#%d %d%n",tc,sumsum);
                continue;
            }
            int S=N/2;
            //왼쪽 위
            int sum=0;
            for (int i = 0; i <S ; i++) {
                for (int j = 0; j <S-i; j++) {
                    sum+=map[i][j];
                }
            }
            //왼쪽 아래
            for (int i = S+1; i < N; i++) {
                for (int j = 0; j < i-S; j++) {
                    sum+=map[i][j];
                }
            }
            //오른쪽 위
            for (int i = 0; i <S ; i++) {
                for (int j = S+i+1; j <N; j++) {
                    sum+=map[i][j];
                }
            }
            //오른쪽 아래
            for (int i = S+1; i < N; i++) {
                for (int j = N-(i-S); j < N; j++) {
                    sum+=map[i][j];
                }
            }
            System.out.printf("#%d %d%n",tc,sumsum-sum);



        }
        }
}