공부-코딩테스트/코테풀이 - 자바, 파이썬
2805. 농작물 수확하기 (자바, 코딩테스트, SWEA)
령과
2022. 8. 3. 09:31
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 풀이
처음 행에서는 1개, 두번째 행부터는 3..... 행이 증가할 때마다 +2씩 카운트 되다가 농장의 크기만큼 커지면 다시 -2씩 돌아가는 카운트를 하는 변수가 필요하다
또한 농장의 중간에 위치하는 index에서 시작하여 카운트 수만큼만 농작물을 수확해야 한다.
두가지 규칙을 표현할만한 변수
파란숫자 규칙 : 농장크기- | 농장크기 -cnt | cnt는 1부터 시작해서 행이 커질때마다 2씩 증가
빨강숫자 규칙 : start - ( 파란숫자 / 2 ) start는 (( 농장크기 - 1 ) / 2 ) 부터시작해서 1씩 증가
빨강숫자의 인덱스에서 시작해서 파란숫자만큼 반복하며 배열에 접근하는 식으로 숫자들을 더해서 처리
나의 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution_SWEA_2805 {
static int[][] table;
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(bf.readLine());
for (int test_case = 1; test_case <= T; test_case++) {
int answer = 0;
int table_size = Integer.parseInt(bf.readLine());
table = new int[table_size][table_size];
for (int i = 0; i < table.length; i++) {
String[] st = bf.readLine().split("");
for (int j = 0; j < table[i].length; j++) {
table[i][j] = Integer.parseInt(st[j]);
}
}
for (int i = 0, cnt = 1; i < table_size; i++, cnt += 2) {
int target_len = table_size - Math.abs(table_size - cnt);
//System.out.println(target_len);
for (int start = (table_size - 1) / 2; start < (table_size - 1) / 2 + target_len; start++) {
answer += table[i][(start - target_len / 2)];
}
}
System.out.println("#" + test_case + " " + answer);
}
}
}