2805. 농작물 수확하기
문제)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
T = int(input())
for _ in range(T):
n = int(input())
# 만약 5x5 배열이라면 마름모 형태를 만들기 위해
# 중앙을 기준으로 양 옆으로 [0, 1, 2, 1, 0] 을 더하고 빼는 방식으로 풀었다.
if n == 1:
li = [0]
else:
li = []
a = 0
flag = False
while a >= 0:
if flag == False:
li.append(a)
a += 1
elif flag == True:
a -= 1
li.append(a)
if a == n // 2:
li.append(a)
flag = True
# 플래그가 True가 되면 정점에서 다시 빼기 시작함.
li = li[:n] # 초기값 때문에 -1이 리스트에 더해지므로 마지막값은 빼준다.
farm = [] #입력값이 붙어 들어와서 일일이 떼주었다.
for i in range(n):
field = input()
temp = []
for j in field:
temp.append(int(j))
farm.append(temp)
answer = 0
mid = n // 2 #중앙을 기준점으로 잡고.
for i in range(n): # li의 각 값만큼 빼고 더한 범위를 합산해서 answer에 더해주었다.
area = sum(farm[i][mid - li[i]:mid + li[i] + 1])
answer += area
print(f"#{_ + 1} {answer}")
|
cs |
첫 단추를 잘못 꿰서 좀 어렵게 푼 듯 하다.
문제 출처 : https://swexpertacademy.com/main/main.do
※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 1220. Magnetic (0) | 2022.02.20 |
---|---|
[SW Expert Academy] 6190. 정곤이의 단조 증가하는 수 (0) | 2022.02.20 |
[SW Expert Academy] 4466. 최대 성적표 만들기 (0) | 2022.02.20 |
[SW Expert Academy] 1959. 두 개의 숫자열 (0) | 2022.02.19 |
[SW Expert Academy] 1970. 쉬운 거스름돈 (0) | 2022.02.19 |