우당탕탕 개발일지
[SWEA] 2805. 농작물 수확하기(Java, D3) 본문
문제
조건 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
'코테 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 6190. 정곤이의 단조 증가하는 수(Java, D3) (0) | 2024.05.18 |
---|---|
[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum(Java, D3) (0) | 2024.05.17 |
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten(Java, D3) (0) | 2024.05.17 |
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View(Java, D3) (0) | 2024.05.17 |
[SWEA] 19113. 식료품 가게(Java, D3) (0) | 2024.05.14 |