1+ '''
2+ ๋ฌธ์ ์ ํต์ฌ ํฌ์ธํธ:
3+ ๋ฌผ์ ํ์ฌ ๋์ด๋ณด๋ค ๋ฎ๊ฑฐ๋ ๊ฐ์ ์ธ์ ์
๋ก๋ง ํ๋ฅผ ์ ์์
4+ ์ฆ, heights[ํ์ฌ] โฅ heights[์ธ์ ]์ผ ๋ ๋ฌผ์ด ํ๋ฆ
5+ ํํ์์ด ์ผ์ชฝ, ์์ชฝ ๊ฒฝ๊ณ
6+ ๋์์์ด ์ค๋ฅธ์ชฝ, ์๋์ชฝ ๊ฒฝ๊ณ
7+
8+ ํด๊ฒฐ๋ฐฉ๋ฒ :
9+ ์ญ๋ฐฉํฅ ์ ๊ทผ๋ฒ์ ์ฌ์ฉํจ. ์ฆ, ๋ฐ๋ค์์ ๊ฑฐ๊พธ๋ก ์ถ์ ํด์ ์ด๋ค ์
๋ค์ด ๊ทธ ๋ฐ๋ค์ ๋ฌผ์ ๋ณด๋ผ ์ ์๋์ง ์ฐพ๋ ๋ฐฉ์์.
10+ ์ด ๋ฐฉ์์ด ๊ฐ ์
์ ๊ฐ๋ณ์ ์ผ๋ก ํ์ธํ ํ์๊ฐ ์๊ณ , ์๊ฐ ๋ณต์ก๋๊ฐ O(mxn)์ผ๋ก ์ต์ ํ ๋์ด ๋ ํจ์จ์ ์.
11+ 1. ํํ์์์ ์์ํด์ ์ญ๋ฅํ ์ ์๋ ๋ชจ๋ ์
์ฐพ๊ธฐ
12+ 2. ๋์์์์ ์์ํด์ ์ญ๋ฅํ ์ ์๋ ๋ชจ๋ ์
์ฐพ๊ธฐ
13+ 3. ๋ ๋ฐ๋ค ๋ชจ๋์์ ๋๋ฌ ๊ฐ๋ฅํ ์
๋ค์ ๊ต์งํฉ ๊ตฌํ๊ธฐ
14+
15+
16+ ์๊ฐ ๋ณต์ก๋: O(m ร n)
17+ ๊ฐ ์
์ ์ต๋ ํ ๋ฒ์ฉ๋ง ๋ฐฉ๋ฌธํ๋ฏ๋ก O(m ร n)
18+ DFS๋ ๊ฐ ์
์์ ์ต๋ ํ ๋ฒ๋ง ์คํ๋จ (์งํฉ์ ํตํ ์ค๋ณต ๋ฐฉ๋ฌธ ๋ฐฉ์ง)
19+
20+ ๊ณต๊ฐ ๋ณต์ก๋: O(m ร n)
21+ pacific_reachable๊ณผ atlantic_reachable ์งํฉ์ด ๊ฐ๊ฐ ์ต๋ m ร n๊ฐ์ ์ขํ ์ ์ฅ
22+ DFS ์ฌ๊ท ํธ์ถ ์คํ์ ์ต๋ ๊น์ด๋ O(m ร n)
23+
24+ '''
25+
26+ class Solution :
27+ def pacificAtlantic (self , heights : List [List [int ]]) -> List [List [int ]]:
28+ # ๊ฒฉ์์ ํฌ๊ธฐ๋ฅผ ๊ตฌํจ
29+ m , n = len (heights ), len (heights [0 ])
30+
31+ # ๊ฐ ๋ฐ๋ค์์ ๋๋ฌ ๊ฐ๋ฅํ ์
๋ค์ ์ ์ฅํ ์งํฉ ์์ฑ
32+ pacific_reachable = set ()
33+ atlantic_reachable = set ()
34+
35+ # DFS ํจ์ ์ ์ : ํ์ฌ ์์น(r,c),๋๋ฌ ๊ฐ๋ฅํ ์งํฉ, ์ด์ ์
์ ๋์ด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์
36+ def dfs (r , c , reachable , prev_height ):
37+ # ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ฑฐ๋, ํ์ฌ ๋์ด๊ฐ ์ด์ ๋์ด๋ณด๋ค ๋ฎ์ผ๋ฉด ํ์ ์ข
๋ฃ
38+ if (r < 0 or r >= m or c < 0 or c >= n or
39+ (r , c ) in reachable or heights [r ][c ] < prev_height ):
40+ return
41+
42+ # ํ์ฌ ์
์ ๋๋ฌ ๊ฐ๋ฅํ ์งํฉ์ ์ถ๊ฐ
43+ reachable .add ((r , c ))
44+
45+ # 4๋ฐฉํฅ์ผ๋ก ์ฌ๊ท์ ์ผ๋ก DFS ํ์
46+ dfs (r + 1 , c , reachable , heights [r ][c ]) # ์๋
47+ dfs (r - 1 , c , reachable , heights [r ][c ]) # ์
48+ dfs (r , c + 1 , reachable , heights [r ][c ]) # ์ค๋ฅธ์ชฝ
49+ dfs (r , c - 1 , reachable , heights [r ][c ]) # ์ผ์ชฝ
50+
51+ # ํํ์ ๊ฒฝ๊ณ(์์ชฝ, ์ผ์ชฝ ๊ฒฝ๊ณ)์์ ์์ํ์ฌ ์ญ๋ฅ ๊ฐ๋ฅํ ๋ชจ๋ ์
ํ์
52+ for i in range (m ):
53+ dfs (i , 0 , pacific_reachable , 0 ) # ์ผ์ชฝ ๊ฒฝ๊ณ
54+ for j in range (n ):
55+ dfs (0 , j , pacific_reachable , 0 ) # ์์ชฝ ๊ฒฝ๊ณ
56+
57+ # ๋์์ ๊ฒฝ๊ณ์์ DFS ์์ (์๋์ชฝ, ์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ)
58+ for i in range (m ):
59+ dfs (i , n - 1 , atlantic_reachable , 0 ) # ์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ
60+ for j in range (n ):
61+ dfs (m - 1 , j , atlantic_reachable , 0 ) # ์๋์ชฝ ๊ฒฝ๊ณ
62+
63+ # ๋ ๋ฐ๋ค ๋ชจ๋์์ ๋๋ฌ ๊ฐ๋ฅํ ์
๋ค์ ๊ต์งํฉ ๊ตฌํด์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
64+ result = []
65+ for r , c in pacific_reachable & atlantic_reachable :
66+ result .append ([r , c ])
67+
68+ return result
69+
70+
71+
0 commit comments