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);
}
}
총평
난이도
⭐★★★★
후기
사진 수정하는 것이 더 오래 걸렸던 문제.
개선할 점
없