|
| 1 | +class Solution: |
| 2 | + def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]: |
| 3 | + # *๋ฌธ์ ์ดํด์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆผ. |
| 4 | + # ๊ฐ ์นธ์์ ์์ํ ๋ฌผ์ด ํํ์๊ณผ ๋์์ ๋ ๋ฐ๋ค ๋ชจ๋๋ก ํ๋ฌ๊ฐ ์ ์๋ ์นธ๋ค ์ฐพ๋ ๋ฌธ์ (๋์ด๊ฐ ๊ฐ๊ฑฐ๋ ๋ฎ์์ชฝ์ผ๋ก๋ง ๋ฌผ์ด ์ด๋ ๊ฐ๋ฅํจ) |
| 5 | + # ๋ฌธ์ ๋ฅผ ์ญ์ผ๋ก ์๊ฐํด์ ๋ฐ๋ค์์ ๋ฌผ์ด ์ฌ๋ผ๊ฐ ์ ์๋ ์นธ(๋ ๋๊ฑฐ๋ ๊ฐ์ ์นธ) ์ฐพ๊ธฐ. |
| 6 | + # DFS(์๊ฐ๋ณต์ก๋ O(m*n), ๊ณต๊ฐ๋ณต์ก๋ O(m*n)) |
| 7 | + |
| 8 | + m, n = len(heights), len(heights[0]) |
| 9 | + pac = set() # ํํ์ ๊ฐ ์ ์๋ ์นธ ์ ์ฅ |
| 10 | + atl = set() # ๋์์ ๊ฐ ์ ์๋ ์นธ ์ ์ฅ |
| 11 | + directions = [(-1,0), (1,0), (0,-1), (0,1)] # ์ํ์ข์ฐ |
| 12 | + |
| 13 | + def dfs(x, y, visited): |
| 14 | + visited.add((x,y)) # ํ์ฌ์์น ๋ฐฉ๋ฌธ์ฒ๋ฆฌ |
| 15 | + |
| 16 | + # ํ์ฌ ์์น์์ ์ํ์ข์ฐ ํ์ |
| 17 | + for dx, dy in directions: |
| 18 | + nx, ny = x + dx, y + dy |
| 19 | + # ๋ค์ ์์น๊ฐ ๋ฒ์์์ด๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ๋ฌผ์ด ํ๋ฌ๊ฐ ์ ์๋ ๋์ด๋ผ๋ฉด, ํ์ |
| 20 | + if 0 <= nx < m and 0 <= ny < n and (nx, ny) not in visited and heights[nx][ny] >= heights[x][y]: |
| 21 | + dfs(nx, ny, visited) |
| 22 | + |
| 23 | + |
| 24 | + for i in range(m): |
| 25 | + dfs(i, 0, pac) # ์ผ์ชฝ(pacific) |
| 26 | + dfs(i, n-1, atl) # ์ค๋ฅธ์ชฝ(atlantic) |
| 27 | + for j in range(n): |
| 28 | + dfs(0, j, pac) # ์์ชฝ(pacific) |
| 29 | + dfs(m-1, j, atl) # ์๋์ชฝ(atlantic) |
| 30 | + |
| 31 | + # ๊ต์งํฉ(ํํ์,๋์์ ๋ชจ๋ ๊ฐ ์ ์๋ ์ขํ์ ๊ต์งํฉ) |
| 32 | + return list(pac & atl) |
0 commit comments