차곡차곡

[SWEA/Python, Java] SW Expert Academy 2805번 - 농작물 수확하기 본문

CS/Algorithm

[SWEA/Python, Java] SW Expert Academy 2805번 - 농작물 수확하기

sohy 2023. 8. 1. 16:37

SW Expert Academy #2805 농작물 수확하기

 

SW Expert Academy

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

swexpertacademy.com

 

Python ver.

T = int(input())

for t in range(1, T+1):
    n = int(input())
    grid = [list(map(int, input())) for _ in range(n)]
    profit = 0
    for i in range(n):
        if i <= n // 2:
            start = n // 2 - i
            end = 2 * i + 1
            for j in range(end):
                profit += grid[i][start+j]
        else:
            start = i - n // 2
            end = n - (2 * i - n) - 1
            for j in range(end):
                profit += grid[i][start+j]
    print(f'#{t} {profit}')

 

Java ver.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Solution {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		
		for (int t = 1; t < T+1; t++) {
			// 입력 받기
			int n = Integer.parseInt(br.readLine());
			int[][] grid = new int[n][n];
			for (int i = 0; i < grid.length; i++) {
				String line = br.readLine();
				for (int j = 0; j < grid.length; j++) {
					grid[i][j] = line.charAt(j) - '0';
				}
			}
			
			// 계산
			int start, end;
			int profit = 0;
			for (int i = 0; i < n; i++) {
				if (i <= n/2) {
					start = n / 2 - i;
					end = 2 * i + 1;
					for (int j = 0; j < end; j++) {
						profit += grid[i][start+j];
					}
				} else {
					start = i - n / 2;
				    end = n - (2 * i - n) - 1;
				    for (int j = 0; j < end; j++) {
						profit += grid[i][start+j];
					}

				}
			}
			
			System.out.println("#" + t + " " + profit);
			
		}
		
	}

}

 

++ 개선

  • 중심 좌표 구하기
    • (n / 2, n / 2)
  • 중심 좌표로 맨해튼 거리가 n / 2 이하인 영역을 탐색 누적 ( |x2 - x1| + |y2 - y1| <= n / 2 )

* 맨해튼 거리 : |x2 - x1| + |y2 - y1| <= n / 2

 


 

참고

 

파이썬#56 - 파이썬 별표찍기, for 문 활용법 여러가지 별찍기

프로그래밍을 어느정도 접하고 익숙해진 사람들에겐 if 문이나 for 문이나 사실 특별할게 없는 문법들입니...

blog.naver.com

 

 

 

Comments