
๋ฌธ์
programmers.co.kr/learn/courses/30/lessons/62050
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์งํ ์ด๋
[[1, 4, 8, 10], [5, 5, 5, 5], [10, 10, 10, 10], [10, 10, 10, 20]] 3 15 [[10, 11, 10, 11], [2, 21, 20, 10], [1, 20, 21, 11], [2, 1, 2, 1]] 1 18
programmers.co.kr
๊ณ์ ํ๋ ค์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ํผ ๋ฌธ์ ์ด๋ค.
์ด๋ป๊ฒ ์ด๋ฐ์๊ฐ์ ๋ ์ฌ๋ฆฌ์ง...?
heap์ ์ฌ์ฉํด์ ํ์๋ค.
์,ํ,์ข,์ฐ ์นธ ์ค์ ๋ฐฉ๋ฌธํ์ง ์์ ์นธ๊ณผ์ ๊ธธ์ด๊ฐ height๋ณด๋ค ํฌ๋ค๋ฉด heap์ ์ฐจ์ด์ ์ ์ ๊ธฐ๋กํ๋ค.
height๋ณด๋ค ์๋ค๋ฉด 0๊ณผ ์ ์ ๊ธฐ๋กํ๋ค. ์ด๋ฅผ ์ด์ฉํด์ min heap์ผ๋ก ์ต์ํ์ ์ฌ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ ์ ์๋ค.
Result
import heapq
def solution(land, height):
dx=[1,-1,0,0]
dy=[0,0,1,-1]
n=len(land)
visited=[[False]*n for x in range(n)]
#์์์ ์ 0,0 ๋ง๊ณ ์๋ฌด๊ฑฐ๋ ํด๋ ๋จ
h=[(0,0,0)]
res=0
while h:
cnt,x,y=heapq.heappop(h)
if visited[x][y]:
continue
res+=cnt
visited[x][y]=True
for i in range(4):
xx=dx[i]+x
yy=dy[i]+y
#๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ๋ง check
if 0<=xx<n and 0<=yy<n and not visited[xx][yy]:
temp=abs(land[x][y]-land[xx][yy])
#height๋ณด๋ค ์ฐจ์ด๊ฐ ํฌ๋ค๋ฉด ๊ทธ ์ฐจ์ด๋ฅผ ๋ฃ์ด์ค์ผํจ(์ฌ๋ค๋ฆฌ ๊ฑด์ค๋น์ฉ)
#height๋ณด๋ค ์๋ค๋ฉด ์ฌ๋ค๋ฆฌ ๊ฑด์ค๋น์ฉ์ด ๋ค์ง ์๊ธฐ ๋๋ฌธ์ 0์ ์ฝ์
if temp>height:
heapq.heappush(h,(temp,xx,yy))
else:
heapq.heappush(h,(0,xx,yy))
return res
'๐ Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค ํฉ์น ํ์ ์๊ธ (0) | 2021.03.11 |
---|---|
[Python] ๋ฐฑ์ค 7453 (2) | 2021.03.09 |
[Python] ๋ฐฑ์ค 1208 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 1167, 1967 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 10917 (0) | 2021.03.07 |