새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 2211 네트워크 복구

by 언호 2022. 6. 24.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

컴퓨터들간의 연결 관계를 기록하고, 1번 컴퓨터를 시작으로 다른 컴퓨터에 도달 가능한 최소 거리들을 구해야 하므로 다익스트라를 이용하였습니다.

다익스트라 탐색 시, 출발 노드와 도착 노드를 기록하여 어떤 회선을 복구하였는지 기록하였습니다.

2) 알고리즘

  • 다익스트라

3) 풀이 코드

사용 언어 - Python

import sys
import heapq
sys.stdin = open('input.txt')

def solution(start):
    h = [(0, start, start)]                                 # 거리, 도착 컴퓨터 번호, 출발 컴퓨터 번호

    while h:
        node = heapq.heappop(h)
        if distance[node[1]] == -1:                         # 컴퓨터 거리 탐색 안되었다면
            distance[node[1]] = node[0]                     # 최소 거리 기록
            answer.append((node[2]+1, node[1]+1))           # 출발 컴퓨터 번호, 도착 컴퓨터 번호 기록
            for next in linked[node[1]]:                    # 현재 컴퓨터와 연결된 다음 컴퓨터들 거리 추가하여 탐색
                heapq.heappush(h, (node[0] + next[0], next[1], node[1]))

N, M = map(int, sys.stdin.readline().split())               # 컴퓨터 개수, 회선(연결) 개수
linked = [[] for _ in range(N)]                             # 컴퓨터간 연결 정보
distance = [-1] * N                                         # 각 컴퓨터간 통신 최소 시간
answer = []                                                 # 복구할 회선 정보

for _ in range(M):
    A, B, C = map(int, sys.stdin.readline().split())
    linked[A-1].append((C, B-1))                            # 양방향 통신이므로 두 컴퓨터에 연결 관계 기록
    linked[B-1].append((C, A-1))

solution(0)                                                 # 1번 컴퓨터 보안 시스템 설치

print(len(answer)-1)
for i in range(1, len(answer)):
    print(*answer[i])

🔗 문제 링크

- https://www.acmicpc.net/problem/2211

 

2211번: 네트워크 복구

첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 8983 사냥꾼  (0) 2022.06.26
[백준] 1976 여행 가자  (0) 2022.06.25
[백준] 2616 소형기관차  (0) 2022.06.23
[백준] 10986 나머지 합  (0) 2022.06.22
[백준] 3584 가장 가까운 공통 조상  (0) 2022.06.21

댓글