파이썬 알고리즘

[파이썬] SWEA 2001 파리 퇴치

뜻 지, 깨달음 오 2022. 10. 18. 07:11

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 

NxN 배열을 지나가면서, 그 안의 MxM 배열 안의 값들을 모두 더하는 문제이다.

 

1) 최댓값은 모든 MxM을 확인하면서 바뀌어야 하기 때문에 for문 맨 바깥에서 설정해주기

T = int(input())

for tc in range(1, 1+T):
    N , M = map(int, input().split())
    arr = [list(map(int, input().split())) for _ in range(N)]
    MAX_kill = 0

2) NxN 배열 지나기 (2중 for문)

    for i in range(N-M+1):
        for j in range(N-M+1):

3) MxM 배열을 새로 지날 때마다 죽인 파리 수를 초기화하기

            killed_flies = 0

4) MxM 배열을 지나가면서, 죽인 파리 수에 배열 값을 더하기

            for k in range(M):
                for l in range(M):
                    killed_flies += arr[i+k][j+l]

5) MxM 배열 하나를 다 지났을 때, 죽인 파리 수가 MAX보다 크다면, MAX를 바꾸기

            if killed_flies >MAX_kill:
                MAX_kill = killed_flies

 

 

전체 풀이)

T = int(input())

for tc in range(1, 1+T):
    N , M = map(int, input().split())
    arr = [list(map(int, input().split())) for _ in range(N)]
    MAX_kill = 0
    for i in range(N-M+1):
        for j in range(N-M+1):
            killed_flies = 0
            for k in range(M):
                for l in range(M):
                    killed_flies += arr[i+k][j+l]

            if killed_flies >MAX_kill:
                MAX_kill = killed_flies

    print(f'#{tc} {MAX_kill}')