SWEA 2001. 파리 퇴치(파이썬)

비만다람쥐·2024년 4월 26일
0
post-custom-banner

문제

문제바로가기

1.N N 의 배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다.
2.M
M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이자고 한다.

접근하기

1.배열안의 숫자들을 M * M 크기만큼 순환하여 가장 큰 수를 찾는다
2.이중 리스트를 활용하여 배열을 만든다
3. N = 5 이고 M = 2일때 i랑 j 는 0,1,2,3 까지만 순환하면 된다

정리하면
큰틀에서 N N 배열이 5이면 i = 0,1,2,3,4 j = 0,1,2,3,4
여기서 M
M 크기인 2 * 2 크기 안의 숫자를 합치려고 하는데 i,j 가 4이상이 되어버리면 범위를 이탈하게 된다
그러므로 큰 범위는 i,j <= 3 이므로 N-M+1 크기만큼 순회해준다

그다음 2 * 2크기의 숫자를 하나하나 합해줄건데 이건 M의 크기만큼 바뀐다
새로운 반복문 for에 x,y 를 추가하고 x의 범위랑 y의 범위가 i,i+M 크기로 바꿔주고 합을 더한다

풀이

T = int(input())

for t in range(1,T+1):
    n,m = map(int,input().split())
    arr = [list(map(int,input().split())) for _ in range(n)]
    answer = 0 #answer = 0으로 두고 합한 수가 answer 보다 크면 answer에 합한 수를 더해준다

    for i in range(n-m+1):
        for j in range(n-m+1):
            asum = 0 # 합한수를 계속해서 초기화해준다
            for x in range(i,i+m):
                for y in range(j,j+m):
                    asum += arr[x][y]
            
            if answer <= asum:
                answer = asum
    
    print(f'#{t} {answer}')
profile
개발자가 되고싶은 사람
post-custom-banner

0개의 댓글