SWEA 2805 - 농작물 수확하기

Updated:

Java

2805 번 - 농작물 수확하기

문제

농장의 크기 N와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.

접근 방법

맨해튼 거리를 이용하여 풀었다.
n * n의 중심점을 기준으로 n/2까지 거리 내에 들어오는 모든 칸의 값을 더하여 수익을 구한다.

이를 한번 더 설명하면, 중심 점에서 각 칸의 거리는 다음 사진과 같이 표현 될 수 있다.

파란색으로 칠해져 있는 위치가 중심점에서 n/2 이하인 칸이므로, 이 칸만 더해 주면 된다.

코드

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

class Solution {
	public static void main(String []args) throws Exception {  
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	int result = 0;
    	StringTokenizer st;
    	int tc = stoi(br.readLine());
    	
    	int n, arr[][], half, sum, diff;
    	for(int idx = 1; idx <= tc; idx++) {
    		sum = 0;
    		n = stoi(br.readLine());
    		arr = new int[n][n];

    		for(int i = 0; i < n; i++) {
    			String temp = br.readLine();
    			for(int j = 0; j < n; j++)
    				arr[i][j] = temp.charAt(j) - '0';
    		}
    		
    		half = n / 2;			// 중심의 위치 & 농작물을 수확하여 얻을 수 있는 위치의 거리
    		for(int i = 0; i < n; i++) {
    			for(int j = 0; j < n; j++) {
    				diff = Math.abs(half - i) + Math.abs(half - j);	
    				if(diff <= half) { 		// 중심으로 부터 n/2 거리 이하 이면,
    					sum += arr[i][j];	// 더한다
    				}
    			}
    		}
    		
    		result = sum;
    		System.out.println("#" + idx + " " + result);
    	}
	}
	
	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

난이도

⭐★★★★

후기

사진 수정하는 것이 더 오래 걸렸던 문제.

개선할 점