๋ฌธ์
programmers.co.kr/learn/courses/30/lessons/62050
๊ณ์ ํ๋ ค์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ํผ ๋ฌธ์ ์ด๋ค.
์ด๋ป๊ฒ ์ด๋ฐ์๊ฐ์ ๋ ์ฌ๋ฆฌ์ง...?
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 |