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 값을 교체해준다.

 

이는 기존의 숫자가 들어있는 리스트에서 최댓값을 구하는 방법과 같은 방식이다.