파이썬 문제풀이/구현

[삼성sw 2001 파이썬] 파리 퇴치

ari0930 2024. 7. 15. 16:59

문제

N*N배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다 

이때 M*M 크기의 파리채로 한 번에 내리쳐 최대한 많은 파리를 죽이고자 한다.

이때 죽는 파리의 개수를 구하여라.

위 예제에서 M=2일경우 최대로 많이 죽는 파리의 수는 49이다.

풀이

이문제 같은 경우는 제약 조건을 읽어보면 N은 5 이상 15 이하이다 그렇기에 난 for문을 4중으로 사용하여 풀어도 문제없다고 생가하여서  4번의 for문을 사용하여 풀었다.

첫 번째 for문은 x의 좌표의 값 두 번째 for문은 y좌표의 값 세 번째 for문은 x 좌표의 값에서 파리채의 영역에 대한 x 좌표의 값 네 번째 for문은 y좌표에 대해서 파리채의 영역에 대한 y좌표의 값이다.

그렇게 하여 파리채 내부의 값들을 더하여 비교하였다.

코드

test=int(input())

for t in range(test):
    n,m=map(int,input().split()) ## 배열 크기 입력
    array=[list(map(int,input().split())) for _ in range(n)]  ## 배열 입력 
    answer=0
    for x in range(n-m+1):
        for y in range(n-m+1):

            sum1=0
            for xm in range(x,x+m):
                for ym in range(y,y+m):
   
                    sum1+=array[xm][ym]
                  
            answer=max(answer,sum1)

    print("#"+str(t+1)+" "+str(answer))

for문을 4번쓰기 싫어 한번은 while 문을 한번 사용하여 풀었는데 코드가 길어질 뿐 결국 시행 횟수는 for문을 4번 쓴 거 하고 같아서 for문은 4번 사용한 코드가 가장 간단한 것 같다.

반응형