떠오르는 물에서 수영하기
'상승하는 물에서 수영' 문제에 대한 자세한 가이드 및 Python 구현.
1. 배우다
'상승하는 물에서 수영' 문제는 고급 그래프 섹션의 핵심 과제입니다.
이 구현은 Python의 쉬운 수준 논리에 중점을 둡니다.
우리는 제공되는 솔루션에서 기술적 정확성과 코드 가독성을 최우선으로 생각합니다.
2. Real-World Applications
3. Visual Intuition
Swim In Rising Water의 논리 흐름을 시각화합니다.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Swim In Rising Water에 대한 문제 설명을 주의 깊게 읽어보세요.
2. Formulate brute force
간단한 반복 솔루션 초안을 작성합니다.
3. Identify inefficiency
중복 계산을 찾으십시오.
4. Optimize search path
해싱이나 정렬을 사용하여 프로세스 속도를 높입니다.
5. Final Implementation
생산 표준에 맞게 코드를 정리합니다.
문제 설명
n x n 정수 행렬 그리드가 제공되며, 여기서 각 값은grid[i][j]는 해당 지점(i, j)의 고도를 나타냅니다. 비가 내리기 시작합니다. 시간 t에서 모든 곳의 물 깊이는 t입니다. 사각형의 두 고도가 최대 t인 경우에만 사각형에서 다른 4방향으로 인접한 사각형으로 수영할 수 있습니다.
왼쪽 상단 사각형(0, 0)에서 시작합니다. 오른쪽 하단 사각형(n-1, n-1)에 도달할 수 있을 때까지 최소 시간은 얼마나 됩니까?
swimInWater(grid: List[List[int]]) -> int 함수를 작성하세요.
- •n == len(grid) == len(grid[i])
- •1 <= n <= 50
- •0 <= grid[i][j] < n^2
- •Each value grid[i][j] is unique
예
grid = [[0,2],[1,3]]
3
At time 3, you are permitted to swim all the way from (0,0) to (1,1). The path is 0 -> 1 -> 3.
grid = [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]]
16
The final path is 0-1-2-3-4-5-16-15-14-13-12-11-10-9-8-7-6. The maximum height along this path is 16.
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 swim_in_water_opt(grid):
return swim_in_water_brute(grid)무차별 대입 코드(스포일러 보호)
무차별 대입 코드(스포일러 보호)
import heapq
def swim_in_water_brute(grid):
n = len(grid)
visit = set([(0, 0)])
min_h = [[grid[0][0], 0, 0]]
while min_h:
t, r, c = heapq.heappop(min_h)
if r == n - 1 and c == n - 1: return t
for dr, dc in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
nr, nc = r + dr, c + dc
if nr < 0 or nc < 0 or nr == n or nc == n or (nr, nc) in visit: continue
visit.add((nr, nc))
heapq.heappush(min_h, [max(t, grid[nr][nc]), nr, nc])Algorithm Pattern Checklist
When dealing with Advanced 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 Try/Except 및 오류 처리
Python 스크립트가 충돌하는 것을 방지하세요. try, Except, finally 블록과 사용자 정의 예외를 올바르게 발생시키는 방법을 알아보세요.
Python에서 문자열을 뒤집는 방법
슬라이싱, reversed() 함수, 루프 연결을 사용하여 Python에서 문자열을 반전하는 방법을 시각적 코드 예제와 함께 알아보세요.
Python 문자열 메서드 치트 시트
Python 문자열 조작에 대한 완전한 참조 가이드입니다. 문자열 속성의 서식 지정, 검색, 분할, 바꾸기 및 확인을 마스터합니다.
Python 대 JavaScript: 어떤 프로그래밍 언어가 가장 좋나요?
Python과 JavaScript를 포괄적으로 비교합니다. 구문 차이점, 성능, 사용 사례(백엔드와 프런트엔드) 및 코딩 예제를 살펴보세요.