코딩 테스트/Level 4
지형 이동
컴닥
2023. 1. 25. 11:38
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/62050
queue를 이용.
from heapq import heappop, heappush
def solution(land, height):
answer = 0
que = [(0, 0, 0)]
visited = set()
while que:
p, y, x = heappop(que)
if (y, x) in visited:
continue
visited.add((y, x))
answer += p
for dy, dx in ((0, 1), (0, -1), (1, 0), (-1, 0)):
next_y, next_x = y + dy, x + dx
if not (len(land) > next_y >= 0 and len(land) > next_x >= 0):
continue
if (diff := abs(land[y][x] - land[next_y][next_x])) <= height:
next_p = 0
else:
next_p = diff
heappush(que, (next_p, next_y, next_x))
return answer
굳이 줄이려면 줄일 수도 있겠으나.. 가독성이..
from heapq import heappop, heappush
def solution(land, height):
answer = 0
que = [(0, 0, 0)]
visited = set()
while que:
p, y, x = heappop(que)
if (y, x) not in visited:
visited.add((y, x))
answer += p
for dy, dx in ((0, 1), (0, -1), (1, 0), (-1, 0)):
next_y, next_x = y + dy, x + dx
if len(land) > next_y >= 0 and len(land) > next_x >= 0:
heappush(que, (0 if (diff := abs(land[y][x] - land[next_y][next_x])) <= height else diff, next_y, next_x))
return answer
반응형