본문 바로가기
백준

[python] 17143. 낚시왕

by DylanMsK 2019. 10. 19.

문제 출처

17143. 낚시왕

 

풀이


from collections import deque

R, C, M = map(int, input().split())
sharks = [list(map(int, input().split())) for _ in range(M)]        # y, x, 속력, 방향, 크기
dr, dc = (0, -1, 1, 0, 0), (0, 0, 0, 1, -1)

def move(shark):
    r, c, s, d, z = shark
    while s > 0:
        nr, nc = r + dr[d], c + dc[d]
        s -= 1
        if nr > R:
            d = 1
            nr -= 2
        elif nr < 1:
            d = 2
            nr += 2
        elif nc > C:
            d = 4
            nc -= 2
        elif nc < 1:
            d = 3
            nc += 2
        r, c = nr, nc
    return r, c, shark[2], d, z


fisher, total = 0, 0
while fisher < C and sharks:
    fisher += 1
    sharks.sort(key=lambda x: (abs(x[1]-fisher), x[0]))
    if sharks[0][1] == fisher:
        *_, z = sharks.pop(0)
        total += z
    sharks = deque(sharks)
    arr = [[[]]*(C+1) for _ in range(R+1)]
    while sharks:
        shark = sharks.popleft()
        r, c, s, d, z = move(shark)
        if arr[r][c]:
            if z > arr[r][c][-1]:
                arr[r][c] = [s, d, z]
        else:
            arr[r][c] = [s, d, z]

    sharks = []
    for y in range(1, R+1):
        for x in range(1, C+1):
            if arr[y][x]:
                s, d, z = arr[y][x]
                sharks.append([y, x, s, d, z])

print(total)

'백준' 카테고리의 다른 글

[python] 2630. 색종이 만들기  (0) 2019.10.21
[python] 17471. 게리맨더링  (0) 2019.10.19
[python] 17472. 다리 만들기 2  (0) 2019.10.19
[python] 2146. 다리 만들기  (0) 2019.10.17
[python] 9375. 패션왕 신해빈  (0) 2019.10.12