카테고리 없음

[Java] 2805. 농작물 수확하기

kyungsubbb 2021. 2. 5. 08:00

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

 

SW Expert Academy

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

swexpertacademy.com


import java.util.Scanner;

public class SWEX_2805Farm {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for (int a = 1; a <= T; a++) {
			int n = sc.nextInt();
			int sum = 0;
			for (int i = 0; i < n; i++) {
				String val = sc.next();
				for (int j = 0; j < n; j++) {
					if (Math.abs(i - n / 2) + Math.abs(j - n / 2) <= n / 2) {
						sum += val.charAt(j) - '0';
					}
				}
			}
			System.out.println("#" + a + " " + sum);
		}
		sc.close();
	}
}

2차원 배열로 마름모 모양을 찍고, 값을 가져오는 방법으로 생각하고 문제를 풀었다.

 

우선 마름모 모양은 배열의 정 중앙으로부터 길이의 절반보다 적은 부분을 선택하면 된다.

 

코드를 작성하고 제출해보니까 더 짧은 방식으로 구현이 가능할 것 같아 위의 코드와 같이 최적화를 하였다.

 

이와 같이 작성하게 되면, 애초에 배열을 작성하지 않아도 값을 구할 수 있어 배열 한번 순회하는? 시간정도만으로 값을 도출할 수 있게 된다.