본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

2805. 농작물 수확하기 (자바, 코딩테스트, SWEA)

by 령과 2022. 8. 3.

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);

		}

	}
}

 

댓글