본문 바로가기
알고리즘/SWEA

[Java] SWEA2805_농작물수확하기

by 댕꼬 2022. 3. 16.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB 

 

SW Expert Academy

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

swexpertacademy.com

별표찍기와 비슷한 문제

농장 크기에 딱 들어맞는 다이아몬드 범위안에 있는 숫자의 합 구하기

[입력]

1
5
14054
44250
02032
51204
52212

 

[출력]

#1 23

 

[풀이]

농장 가운데행은 농장의 크기와 같고, 그 행을 기준으로 삼각형 2개가 대칭되어있다는 사실을 제일먼저 파악했다.(가운데 열로도 마찬가지!)

농장은 항상 홀수이므로, 농장크기/2 의 몫이 가운데행이 된다.

이를 half변수에 저장해주고, 행이 half보다 작을때(윗삼각형), half(가운데행),half보다 클때(아래삼각형) 총3구간으로 나누어 농작물을 계산하였다.

 

또한 윗삼각형은 1행 가운데 열을 기준으로 다음행으로 갈수록 왼쪽 시작범위 -1, 오른쪽 끝범위+1 이되는것을 파악하였고, 이는 start변수와 end변수를 두어 한행이 지날때마다 start--, end++로 구현해주었다.

윗삼각형에서는 농작물 계산하고 범위지정(start,end) 했으므로 아래삼각형 계산시 start와end는 가운데행과 일치한다.

때문에 아래삼각형에서는 범위지정먼저 해주고 농작물을 계산해야 함에 주의한다.

 

import java.util.Scanner;

public class swea2805_farm {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int tc = sc.nextInt();
		for (int t = 0; t < tc; t++) {
			int size = sc.nextInt();
			int[][] arr = new int[size][size];
			sc.nextLine();
			
			
			for (int r = 0; r < size; r++) {	//input값 입력
				String a = sc.nextLine();
				for (int c = 0; c < size; c++) {
					arr[r][c] = (a.charAt(c)) - '0';	//char변수 int로 변환
				}
			}

			int half = (size / 2);		//가운데 행(가운데 열)
			int sum = 0;
			
			int start = half; // 더하는 곳 시작
			int end = half; // 더하는 곳 끝
			
			for (int i = 0; i < size; i++) {
				if (i < half) {			//윗삼각형
					for (int j = start; j <= end; j++) {
						sum += arr[i][j];

					}
					start--;
					end++;

				}
				if (i == half) {		//가운데행(다 더한다)
					for (int j = 0; j < size; j++)
						sum += arr[i][j];
				}
				if (i > half) {			//아래삼각형
					start++;			
					end--;
					for (int j = start; j <= end; j++) {
						sum += arr[i][j];
					}
					
				}
			}
			System.out.printf("#%d %d\n", t + 1, sum);
		}
		sc.close();
	}

}

 

 

 

 

728x90

'알고리즘 > SWEA' 카테고리의 다른 글

[Java] SWEA5215_ 햄버거다이어트  (1) 2022.03.17
[Java] SWEA1218_괄호짝짓기  (0) 2022.03.16
[Java] SWEA1873_상호의배틀필드  (0) 2022.03.16
[Java] SWEA1208_Flatten  (0) 2022.03.16
[Java] SWEA2001_파리퇴치  (0) 2022.03.16

댓글