mun dev

[SWEA] D3 2805 농작물 수확하기 자바(Java) 본문

알고리즘/SWEA

[SWEA] D3 2805 농작물 수확하기 자바(Java)

mndev 2023. 11. 19. 00:02

문제 링크

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

 

SW Expert Academy

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

swexpertacademy.com

 

풀이

문제를 보고 가운데 행을 기준으로 위, 아래 삼각형 계산해야 할 열은 같으므로 해당 행 값만 바꿔주면서 더해주고

가운데 행이라면 행의 모든 값을 더하는 방식으로 구현했다.

 

풀이 코드

import java.io.*;
import java.util.*;

public class Solution {
	public static int n;
	public static int result = 0;
	public static int arr[][];

	public static void main(String[] args) throws NumberFormatException, IOException {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for (int testCase = 1; testCase <= T; testCase++) {
			n = sc.nextInt();

			arr = new int[n][n];
			result = 0;

			for (int i = 0; i < n; i++) {
				String s = sc.next();
				String strArr[] = s.split("");
				for (int j = 0; j < n; j++) {
					arr[i][j] = Integer.parseInt(strArr[j]);
				}
			}

			if (n == 1) {
				result = arr[0][0];
				System.out.println("#" + testCase + " " + result);
				continue;
			}

			int rowIdx = 1; // 계산해야 할 행 카운트 역할
			int start = n / 2; // 시작 값

			for (int i = 1; i <= n; i += 2) { // 내려갈 수록 2칸씩 증가
				if (i < n) { // 가운데 줄 기준 위쪽 삼각형, 아래쪽 삼각형 함께 계산
					for (int j = start; j < start + i; j++) {
						result += arr[rowIdx - 1][j]; // 첫행, 열
						result += arr[n - rowIdx][j]; // 마지막행, 열
					}
					start--; // 계산해야 할 열의 인덱스는 점점 앞으로 가니까 감소
					rowIdx++;
				}

				if (i == n) { // 현재 행이 n과 같다면 해당 행 0부터 n까지 더함
					for (int k = 0; k < n; k++) {
						result += arr[n / 2][k];
					}
				}

			}
			System.out.println("#" + testCase + " " + result);

		}
	}
}