Programming/SW Expert Academy
20210114 // 삼성 SW Expert 아카데미 // 2001
껨코
2021. 1. 14. 14:16
삼성 SW Expert 아카데미 2001번 "파리 퇴치" 문제입니다.
TC = int(input())
for tc in range(1, TC+1):
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
arr_max = 0
for i in range(N-M+1):
for j in range(N-M+1):
temp = 0
for k in range(M):
temp += sum(arr[i+k][j:j+M])
if arr_max < temp:
arr_max = temp
print("#%s"%tc, arr_max)
N x N 배열을 입력받고 M x M 크기의 파리채를 한 번 내리쳐서 최대한 많은 파리를 잡았을 때 그 파리의 수를 구하는 문제다.
이중 for문으로 입력받은 2차원 배열을 가로 세로 각각 인덱스 0 부터 N-M+1까지 탐색한다.
이유는 그 인덱스까지 탐색해야 그 인덱스를 기준점으로 길이가 M인 정사각형 범위를 유효한 범위내에서 탐색할 수 있기 때문이다.
따라서 위의 방식으로 탐색을 하고 합을 구해서 arr_max와 비교해서 arr_max보다 크면 arr_max 값을 교체해준다.
이는 기존의 숫자가 들어있는 리스트에서 최댓값을 구하는 방법과 같은 방식이다.