diff --git a/백준/Gold/32294. 수열과 개구리/README.md b/백준/Gold/32294. 수열과 개구리/README.md new file mode 100644 index 0000000..960527d --- /dev/null +++ b/백준/Gold/32294. 수열과 개구리/README.md @@ -0,0 +1,44 @@ +# [Gold II] 수열과 개구리 - 32294 + +[문제 링크](https://www.acmicpc.net/problem/32294) + +### 성능 요약 + +메모리: 108660 KB, 시간: 1080 ms + +### 분류 + +그래프 이론, 최단 경로, 데이크스트라 + +### 제출 일자 + +2026년 2월 9일 21:05:16 + +### 문제 설명 + +

길이가 n이고 양의 정수로 구성된 수열 ab가 있습니다. 두 수열의 인덱스는 1부터 시작합니다.

+ +

이 수열 위에 개구리 한 마리가 있습니다. 개구리는 초기에 어떤 정수 위치 1xn에서 출발하며, 자신의 위치가 수열 밖이 될 때까지 다음을 반복합니다.

+ + + +

개구리가 시작하는 위치 x에 대해, 개구리의 위치가 수열 밖이 될 수 있는 최초의 시각을 f(x)초라고 정의할 때, 여러분은 f(1),f(2),,f(n)의 값을 모두 구해야 합니다.

+ +

어떤 위치 x에 대해서, 1xn이면 수열 안, x<1 또는 x>n이면 수열 밖이라고 부릅니다.

+ +### 입력 + +

첫 번째 줄에 두 수열의 길이 n이 주어집니다. (1n2105)

+ +

두 번째 줄에 n개의 정수 a1,a2,,an이 공백으로 구분되어 주어집니다. (1ain)

+ +

세 번째 줄에 n개의 정수 b1,b2,,bn이 공백으로 구분되어 주어집니다. (1bi106)

+ +### 출력 + +

한 줄에 f(1),f(2),,f(n)의 값을 공백으로 구분하여 순서대로 출력합니다.

+ +

문제의 제한에 따라 모든 1in에 대해 f(i)가 유한함을 증명할 수 있습니다.

+ diff --git a/백준/Gold/32294. 수열과 개구리/수열과 개구리.py b/백준/Gold/32294. 수열과 개구리/수열과 개구리.py new file mode 100644 index 0000000..1e8154c --- /dev/null +++ b/백준/Gold/32294. 수열과 개구리/수열과 개구리.py @@ -0,0 +1,41 @@ +import sys +import heapq + +input = sys.stdin.readline + +n = int(input()) +a = [0] + list(map(int, input().split())) +b = [0] + list(map(int, input().split())) + +rev = [[] for _ in range(n + 1)] + +for u in range(1, n + 1): + v1 = u - a[u] + v2 = u + a[u] + + if 1 <= v1 <= n: + rev[v1].append(u) + else: + rev[0].append(u) + + if 1 <= v2 <= n: + rev[v2].append(u) + else: + rev[0].append(u) + +INF = 10**30 +dist = [INF] * (n + 1) +dist[0] = 0 + +pq = [(0, 0)] +while pq: + d, v = heapq.heappop(pq) + if d != dist[v]: + continue + for u in rev[v]: + nd = d + b[u] + if nd < dist[u]: + dist[u] = nd + heapq.heappush(pq, (nd, u)) + +sys.stdout.write(" ".join(map(str, dist[1:])) + "\n")