태평양 대서양 물의 흐름
'태평양 대서양 수류' 문제에 대한 자세한 가이드 및 Python 구현입니다.
1. 배우다
'태평양 대서양 수류' 문제는 그래프 섹션의 핵심 과제입니다.
이 구현은 Python의 쉬운 수준 논리에 중점을 둡니다.
우리는 제공되는 솔루션에서 기술적 정확성과 코드 가독성을 최우선으로 생각합니다.
2. Real-World Applications
3. Visual Intuition
Pacific Atlantic Water Flow의 논리 흐름 시각화.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Pacific Atlantic Water Flow에 대한 문제 설명을 주의 깊게 읽으십시오.
2. Formulate brute force
간단한 반복 솔루션 초안을 작성합니다.
3. Identify inefficiency
중복 계산을 찾으십시오.
4. Optimize search path
해싱이나 정렬을 사용하여 프로세스 속도를 높입니다.
5. Final Implementation
생산 표준에 맞게 코드를 정리합니다.
문제 설명
태평양과 대서양을 모두 접하고 있는 m x n 직사각형 섬이 있습니다. 태평양은 섬의 왼쪽과 위쪽 가장자리에 닿고, 대서양은 섬의 오른쪽과 아래쪽 가장자리에 닿습니다.
섬은 정사각형 셀의 격자로 분할되어 있습니다. 높이[r][c]가 좌표(r, c)에서 셀의 해발 높이를 나타내는 m x n 정수 행렬 높이가 제공됩니다.
이웃 셀의 높이가 현재 셀의 높이보다 작거나 같으면 빗물은 바로 북쪽, 남쪽, 동쪽, 서쪽으로 이웃 셀로 흐를 수 있습니다. 물은 바다에 인접한 모든 세포에서 해당 바다로 흐를 수 있습니다.
그리드 좌표 결과의 2D 목록을 반환합니다. 여기서 result[i] = [ri, ci]는 빗물이 셀 (ri, ci)에서 태평양과 대서양 모두로 흐를 수 있음을 나타냅니다.
pacificAtlantic(heights: List[List[int]]) -> List[List[int]] 함수를 작성하세요.
- •m == len(heights)
- •n == len(heights[0])
- •1 <= m, n <= 200
- •0 <= heights[i][j] <= 10^5
예
heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
[[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]
These coordinates can flow to both Pacific (via top/left) and Atlantic (via bottom/right) oceans.
heights = [[1]]
[[0,0]]
The single cell borders both oceans directly.
Need a Hint?
Edge Cases to Watch
- 빈 입력 구조
- 단일 요소 입력
- 큰 수치 범위
해결할 준비가 되셨나요?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
인터뷰 통찰력 및 변형
복잡성 분석 분석
왜 시간인가?: Directly evaluates all possibilities.
왜 우주인가?: Uses standard local memory.
왜 시간인가?: Optimized paths reduce total operations.
왜 우주인가?: May trade memory for speed.
최적화된 솔루션 Python 코드
최적화된 솔루션 Python 코드
def pacific_atlantic_opt(heights):
ROWS, COLS = len(heights), len(heights[0])
pac, atl = set(), set()
def dfs(r, c, visit, prevHeight):
if ((r, c) in visit or r < 0 or c < 0 or r == ROWS or c == COLS or heights[r][c] < prevHeight):
return
visit.add((r, c))
dfs(r + 1, c, visit, heights[r][c])
dfs(r - 1, c, visit, heights[r][c])
dfs(r, c + 1, visit, heights[r][c])
dfs(r, c - 1, visit, heights[r][c])
for c in range(COLS):
dfs(0, c, pac, heights[0][c])
dfs(ROWS - 1, c, atl, heights[ROWS - 1][c])
for r in range(ROWS):
dfs(r, 0, pac, heights[r][0])
dfs(r, COLS - 1, atl, heights[r][COLS - 1])
res = []
for r in range(ROWS):
for c in range(COLS):
if (r, c) in pac and (r, c) in atl:
res.append([r, c])
return res무차별 대입 코드(스포일러 보호)
무차별 대입 코드(스포일러 보호)
def pacific_atlantic_brute(heights):
res = []
ROWS, COLS = len(heights), len(heights[0])
def can_reach(r, c, target_set):
visited = set()
q = [(r, c)]
visited.add((r, c))
while q:
curr_r, curr_c = q.pop(0)
if (curr_r, curr_c) in target_set: return True
for dr, dc in [[1,0], [-1,0], [0,1], [0,-1]]:
nr, nc = curr_r + dr, curr_c + dc
if 0 <= nr < ROWS and 0 <= nc < COLS and (nr, nc) not in visited and heights[nr][nc] <= heights[curr_r][curr_c]:
visited.add((nr, nc))
q.append((nr, nc))
return False
pac_border = set([(0, c) for c in range(COLS)] + [(r, 0) for r in range(ROWS)])
atl_border = set([(ROWS-1, c) for c in range(COLS)] + [(r, COLS-1) for r in range(ROWS)])
for r in range(ROWS):
for c in range(COLS):
if can_reach(r, c, pac_border) and can_reach(r, c, atl_border):
res.append([r, c])
return resAlgorithm Pattern Checklist
When dealing with Graphs data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
표준 그래프 문제 속성이 적용됩니다.
관련 질문
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
권장 Python 리소스
관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.
Python 루프
Python 루프를 사용하여 데이터를 반복하는 방법을 알아보세요. 대화형 예제를 통해 for 루프, while 루프, 중단, 계속 및 루프 모범 사례를 마스터하세요.
Python에서 목록을 정렬하는 방법(오름차순 및 내림차순)
sort() 메서드와 sorted() 함수를 사용하여 Python에서 목록을 정렬하는 방법을 알아보세요. 사용자 정의 키 정렬 및 역순 예시를 살펴보세요.
Python 제어 흐름 치트 시트
Python의 조건문, 루프 및 루프 제어 구조를 마스터하세요. if-else, for, while, 중단 및 계속을 알아보세요.
Python 대 JavaScript: 어떤 프로그래밍 언어가 가장 좋나요?
Python과 JavaScript를 포괄적으로 비교합니다. 구문 차이점, 성능, 사용 사례(백엔드와 프런트엔드) 및 코딩 예제를 살펴보세요.