파이썬 알고리즘

[파이썬] SWEA 12712 파리퇴치3 (for 문으로 풀기)

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

https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AXuARWAqDkQDFARa& 

 

SW Expert Academy

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

swexpertacademy.com

 

 

 

 

while 문 풀이

https://gkim1011.tistory.com/m/45

 

[파이썬] SWEA 12712 파리퇴치3 (while 문으로 풀기)

https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AXuARWAqDkQDFARa SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 그림에 그린

gkim1011.tistory.com

 

while문 풀이에서는 막히는 부분 없으면 j에 1을 더했다면, 

for문 풀이에서는 1부터 M까지 for문을 돌면서 

막히는 부분(벽과 만나는 부분)이 있으면 continue를 했다.

def kill1(y, x):
    global total1
    dy = [-1, 1, 0, 0]
    dx = [0, 0, -1, 1]
    total1 += arr[y][x]
    for j in range(1, M):
        for i in range(4):
            ny = y+dy[i]*j
            nx = x+dx[i]*j

            if nx<0 or ny<0 or nx>N-1 or ny>N-1:
                continue

            total1 += arr[ny][nx]


def kill2(y, x):
    global total2
    dy = [-1, 1, -1, 1]
    dx = [-1, -1, 1, 1]
    total2 += arr[y][x]
    for j in range(1, M):
        for i in range(4):
            ny = y+dy[i]*j
            nx = x+dx[i]*j

            if nx<0 or ny<0 or nx>N-1 or ny>N-1:
                continue

            total2 += arr[ny][nx]

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 = -21e8
    for i in range(N):
        for j in range(N):
            total1 = 0
            total2 = 0
            kill1(i, j)
            if total1>MAX:
                MAX = total1
            kill2(i, j)
            if total2>MAX:
                MAX = total2

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