문제 출처
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)