반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다익스트라
- 에라스토테네스의 체
- BOJ
- level3
- 수학
- python
- 투포인터
- N과M
- 운영체제
- programmers
- MYSQL
- 백준
- 그리디
- 스택
- 재귀
- 파이썬
- BFS
- 브루트포스
- level1
- 딕셔너리
- level2
- DP
- 프로그래머스
- 코딩테스트
- 구현
- 다이나믹 프로그래밍
- 가상메모리 관리
- 가상메모리
- 힙
- dfs
Archives
- Today
- Total
동캄의 코딩도장
백준 1368 [물대기] 파이썬 본문
반응형
https://www.acmicpc.net/problem/1368
# 백준 1368 물대기
# 문제 요약:
# 각 논에 직접 우물을 팔거나, 다른 논에서 물을 끌어올 수 있다.
# 모든 논이 물을 공급받을 때 최소 비용을 구하는 문제.
# 풀이 아이디어:
# "우물"을 가상의 0번 노드로 두고, 우물 ↔ 각 논의 비용(dig_costs)을 간선으로 생각.
# 그리고 논 ↔ 논 간의 물길 비용(recv_costs)도 간선으로 생각해서 MST를 구한다.
# 여기서는 Prim 알고리즘을 사용.
import sys
import heapq
input = sys.stdin.readline
N = int(input()) # 논의 개수
dig_costs = [] # dig_costs[i] = i번 논에 우물을 직접 파는 비용
recv_costs = [] # recv_costs[i][j] = i번 논에서 j번 논으로 물을 끌어오는 비용
visited = [False for _ in range(N + 1)] # 각 논의 방문 여부 (0은 가상의 우물 노드)
# 각 논에 우물 파는 비용 입력
for _ in range(N):
dig_costs.append(int(input()))
# 논 사이의 물길 비용 입력
for _ in range(N):
recv_costs.append(list(map(int, input().split())))
# 우물을 팔 수 있는 모든 선택지를 우선순위 큐(힙)에 넣음
# (비용, 논 번호)
# → 이는 "가상의 우물 노드(0)에서 각 논으로 가는 간선"을 추가하는 효과
q = []
for i in range(N):
heapq.heappush(q, (dig_costs[i], i + 1))
cnt = 0 # 물 공급된 논 개수
ans = 0 # 최소 비용 합
# Prim 알고리즘 시작
while q and cnt < N:
cost, node = heapq.heappop(q)
# 이미 물이 공급된 논이면 스킵
if visited[node]:
continue
# 새로운 논에 물 공급
visited[node] = True
ans += cost
cnt += 1
# 현재 논에서 다른 논으로 물길을 연결하는 간선 후보들을 힙에 추가
for nxt in range(1, N + 1):
if not visited[nxt]:
heapq.heappush(q, (recv_costs[node - 1][nxt - 1], nxt))
# 모든 논에 물 공급이 끝났으므로 최소 비용 출력
print(ans)
자면서 푸는법이 얼핏 떠올랐는데, 정리가 안됐다...
결국 GPT의 도움을 받았는데, 풀이를 보니 너무 허무했다.
그냥 우물도 heapq에 넣으면 그만이었다. (그래야 Prim 알고리즘이 정확히 동작)
반응형
'코테 > BOJ' 카테고리의 다른 글
| 백준 16637 [괄호 추가하기] 파이썬 (0) | 2025.09.03 |
|---|---|
| 백준 16719 [ZOAC] 파이썬 (0) | 2025.08.24 |
| 백준 1774 [우주신과의 교감] 파이썬 (0) | 2025.08.23 |
| 백준 13418 [학교 탐방하기] 파이썬 (0) | 2025.08.23 |
| 백준 2346 [풍선 터뜨리기] 파이썬 (0) | 2025.08.21 |