뚱땅뚱땅

[문제] swea 2805번 농작물 수확하기 본문

알고리즘/swea

[문제] swea 2805번 농작물 수확하기

양순이 2021. 2. 3. 14:37
728x90

* 출처 swea D3

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB&categoryId=AV7GLXqKAWYDFAXB&categoryType=CODE&problemTitle=2805&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com

 

내 생각

 

1. 첫번째 풀이

다이아몬드 별찍기의 응용문제인 듯 하다. 

아래와 같이 일반화를 해서 풀으니 금방 풀렸다. 

절반 나눠서 좌표의 합에 대한 범위를 고려해봤다.

 

public class Solution {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int tc = 0;tc<T;tc++) {
			int N = sc.nextInt();
			int[][] field = new int[N][N];
			for(int i=0;i<N;i++) {
				String s = sc.next();
				
				//init field
				for(int j=0;j<N;j++) {
					int value = s.charAt(j)-'0';
					field[i][j] = value;
				}
			}
			int half = N/2;
			int sum =0;
			
			for(int i=0;i<N;i++) {
				if(i<= half) {
					for(int j=0;j<N;j++) {
						if((i+j)>=half && (i+j)<=(2*i+2)) {
							sum+=field[i][j];
						}
					}
				}
				else {
					for(int j=0;j<N;j++) {
						if(i+j>= (2*i-2) && i+j<=(N-1+half)) {
							sum += field[i][j];
						}
					}
				}
				
			}
			
			System.out.println("#"+ (tc+1) + " "+ sum);
		}
	}
}

 

2. 두번째 풀이

 

아래 그림 보면서 잘 생각해보자!

public class SWEA2805_2 {
	
	public static void main(String[] args) {
		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);
		}
	}
}
728x90
Comments