우당탕탕 개발일지

[SWEA] 2805. 농작물 수확하기(Java, D3) 본문

코테/SW Expert Academy

[SWEA] 2805. 농작물 수확하기(Java, D3)

ujin302 2024. 5. 17. 22:33
반응형

문제

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

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



                                         
1 X 1크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 3이다.
3 X 3크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 16 (3 + 2 + 5 + 4 + 2)이다.
5 X 5크기의 농장에서 자라는 농작물의 수확하여 얻을 수 있는 수익은 25 (3 + 2 + 1 + 1 + 2 + 5 + 1 + 1 + 3 + 3 + 2 + 1)이다.

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

 

입출력 예

 

풀이

밭의 크기는 항상 홀수로 주어지기에 가운데 숫자를 중심으로 문제를 풀었다.

 

5 x 5가 있다고 가정하겠다. 

a는 가운데 숫자에 도달한 이후 하나씩 줄여가야하기에 그에 대한 값을 다룬다. 

 

3번째 열은 실제 더하는 인덱스 값을 의미한다.

그 옆에 2번째 열은 변수로 나타낸 값이다. 

 

 

이와 같은 그림에 대한 식을 코드로 나타내 보면 아래와 같다.

i > center 이라는 조건을 주어 a의 값을 제어한다. 

result 값에 결과값을 더할 때에는 a 변수를 사용하여 index를 제어한다. 

 

a부터 시작하여 첫번째 사진의 2번째 열을 표현하였다. 

마지막 [i][center]값은 중간에 계속 필수적으로 더하여야 하는 값을 의미한다. 

 

 

코드

		Scanner sc = new Scanner(System.in);
		int t=sc.nextInt();
		
		for(int tc =1; tc<1+t; tc++) {
			int result = 0;
			int n = sc.nextInt();
			int[][] numArr = new int[n][n];
			// 입력값 저장 
			for(int i=0; i<n; i++) {
				String str = sc.next();
				char[] strToChar = str.toCharArray();
				for(int j=0; j<n; j++) {
					int num = Character.getNumericValue(strToChar[j]);
					numArr[i][j] = num;
				}
			}
			
			int center = n/2; // 가운데 숫자 
			int a = 0; // 최고점 찍은 후 사용
			
			for(int i=0; i<n; i++) {
				if(i > center) {
					a--;
				}else {
					a = i;
				}
				
				for(int j=a; j>0; j--) {
					result += numArr[i][center-j];
					result += numArr[i][center+j];
				}
				result += numArr[i][center];
			}
			
			System.out.println("#"+tc+ " " + result);
		}

 

SWEA 문제

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

 

SW Expert Academy

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

swexpertacademy.com

 

 

반응형