코딩테스트/SWExpertAcademy

농작물 수확하기 Python(SW Expert Academy)

멍토 2020. 3. 22.

난이도 : D3

문제번호 :2805

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB&categoryId=AV7GLXqKAWYDFAXB&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

N X N크기의 농장이 있다.

이 농장에는 이상한 규칙이 있다.

규칙은 다음과 같다.


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

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

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와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.

제약사항

농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)

농작물의 가치는 0~5이다.


입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.

출력

각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다

예시

입력 출력
1
5
14054
44250
02032
51204
52212
#1 23

2. 문제풀이

달팽이 문제 풀이를 응용하여 문제를 풀었다.

처음에는 반절부터 시작하여 1칸

두번째는 한칸에 양쪽에 1칸씩 더하고

이런식으로 접근하여 문제를 풀었다.

행의 반절까지는 양쪽을 늘리 되는 형식이다.

행의 중간지점으로 오게된다면 조건물을 통해 증가하는걸 감소하는 형식으로 바꾸어준다.

아래로 내려갈수록 양쪽의 범위가 줄어들면서 계산을 하게된다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#D3 2805 농작물 수확하기
= int(input())
for t in range(1, T+1):
    N = int(input())
    map_list = [list(map(int, list(input()))) for _ in range(N)]
    t_N = N//2
    change = -1
    answer = 0
    for i in range(N):
        if i >= N//2:
            change = 1
        for j in range(abs(i-N//2), abs(N-t_N)):
            answer += map_list[i][j]
        t_N += change
    print('#{} {}'.format(t, answer))

댓글

💲 광고입니다.