Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

으하하 공부일기

[SWEA] - 2805. 농작물 수확하기 (D3) 본문

SWEA/D3

[SWEA] - 2805. 농작물 수확하기 (D3)

0으하하0 2022. 5. 7. 18:56

[문제]

 

N X N크기의 농장이 있다.
이 농장에는 이상한 규칙이 있다.
규칙은 다음과 같다.

   ① 농장은 크기는 항상 홀수이다. (1 X 1, 3 X 3 … 49 X 49)
   ② 수확은 항상 농장의 크기에 딱 맞는 정사각형 마름모 형태로만 가능하다.

1 X 1크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 3이다.
3 X 3크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 16 (3 + 2 + 5 + 4 + 2)이다.
5 X 5크기의 농장에서 자라는 농작물의 수확하여 얻을 수 있는 수익은 25 (3 + 2 + 1 + 1 + 2 + 5 + 1 + 1 + 3 + 3 + 2 + 1)이다.
농장의 크기 N와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.

[제약 사항]
농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)
농작물의 가치는 0~5이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.

[출력]
각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

문제 풀기

2805. 농작물 수확하기

 


[풀이]

  • 2차원 배열에 작물의 가치를 저장한다.
  • 1행의 (n/2)번째 인덱스 부터 시작하여 2칸씩 넓혀가면서 가치를 더하면서 내려간다.
  • 행이 (n/2)번째 인덱스가 되면 2칸씩 줄여나간다.
import java.util.Scanner;

class Solution {	
	public static void main(String[] args) throws Exception {		
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int tc=1; tc<=t; tc++) {
			int n = sc.nextInt();
			
			int arr[][] = new int[n][n];
			int result = 0;
			
			for(int i=0; i<n; i++) {
				String str = sc.next();
				for(int j=0; j<n; j++) {
					arr[i][j] = str.charAt(j) - '0';
				}
			}
			
			int idx = 0;
			for(int i=0; i<n; i++) {
				for(int j=(n/2)-idx; j<=(n/2)+idx; j++) {
					result += arr[i][j];
				}
				
				if(i>=n/2) idx--;
				else idx++;
			}
			
			System.out.format("#%d %d\n", tc, result);
		}
	}
}