그림판유저의 은밀한 개발

[SWEA] swexpert 2805 - 농작물 수확하기 본문

알고리즘/swexpert

[SWEA] swexpert 2805 - 농작물 수확하기

혀나_0_0 2019. 3. 7. 23:49

SW Expert Academy 2805 - 농작물 수확하기 


N x N 크기의 농장에서 다음과 같은 규칙을 가지고 수확을 합니다.


   ① 농장은 크기는 항상 홀수이다. (1 X 1, 3 X 3 … 49 X 49)

   ② 수확은 항상 농장의 크기에 딱 맞는 정사각형 마름모 형태로만 가능하다.


위의 규칙을 그림을 그려 확인하면 다음과 같습니다.


이것은 N x N 안에 마름모 모양으로 별 찍기라고 생각하면 쉽습니다.


먼저, 마름모 모양의 별을 찍기 위해서는 일단 먼저 두 부분으로 나누어야 합니다.


위, 아래로 나누어 증가하는 부분과 감소하는 부분을 나눌 수 있습니다.


그 후에 아래와 같이 별은 중간에서부터 시작하므로 중간을 나누어 그것을 기준으로 열의 위치를 잡습니다.


처음은 (n/2, n/2), ... (i, n-i), ... (0, n) 까지 도달하게 합니다.


아래부분도 윗부분과 마찬가지지만, n/2에서 줄어드는게 아닌, 0부터 n/2까지 증가하면서 for문을 돌려주면 됩니다.


이렇게 모양이 잡히면 그 때 배열안의 값을 더해 농작물들을 수확합니다.


위의 공식을 적용한 코드는 다음과 같습니다.


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
import java.util.Scanner;
 
public class Solution {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int tc = sc.nextInt();
        for(int t=1; t<=tc; t++) {
            int n = sc.nextInt();
            int sum=0;
            for(int i=n/2; i>=0; i--) {
                String s = sc.next();
                for(int j=i; j<n-i; j++) {
                    sum += s.charAt(j)-'0';
                }
            }
            for(int i=1; i<=n/2; i++) {
                String s = sc.next();
                for(int j=i; j<n-i; j++) {
                    sum += s.charAt(j)-'0';
                }
            }
            System.out.println("#" + t + " " + sum);
        }
    }
 
}
cs