[1414] 불우이웃돕기 (MST, 문자열)

2023. 4. 25. 15:07·Coding Test/Graph
728x90
 

1414번: 불우이웃돕기

첫째 줄에 컴퓨터의 개수 N이 주어진다. 둘째 줄부터 랜선의 길이가 주어진다. i번째 줄의 j번째 문자가 0인 경우는 컴퓨터 i와 컴퓨터 j를 연결하는 랜선이 없음을 의미한다. 그 외의 경우는 랜선

www.acmicpc.net

 

 

풀이

"""
N개의 컴퓨터를 모두 서로 연결, 각각의 컴퓨터는 랜선으로 연결
기부할 수 있는 랜선의 길이의 최댓값

컴퓨터의 개수 N(1~50)

랜선의 길이
a~z: 1~26, A~Z: 27~52, (i,j)=0: 랜선이 없음
"""
import sys
input = sys.stdin.readline
from queue import PriorityQueue

n=int(input()) #컴퓨터개수
total=0 # 총 랜선 길이

pq = PriorityQueue()

#랜선길이
for i in range(n):
    temp=list(input())
    for j in range(n):
        num=0
        # 문자열 숫자로 변환
        if 'a' <= temp[j] <= 'z': # 소문자
            num = ord(temp[j])-ord('a')+1
        elif 'A' <= temp[j] <= 'Z': # 대문자
            num = ord(temp[j])-ord('A')+27

        total+=num # 총 랜선 길이 저장
        if i!=j and num!=0: # i,j가 다르고 연결되어있다면
            pq.put((num,i,j))   # 랜선 정보를 큐에 저장

# 인덱스 배열 : 대표 노드 저장
arr = [0]*n
for i in range(n):
    arr[i] = i

# 유니온 파인드
def find(a):
    if a == arr[a]:
        return a
    else:
        arr[a] = find(arr[a])
        return arr[a]

def union(a, b):
    a = find(a)
    b = find(b)
    if a != b:
        arr[b] = a

useEdge = 0 # 사용 에지 수 저장 변수
result = 0 # 정답 변수

# MST
while pq.qsize()>0:
    w,s,e=pq.get()
    if find(s)!=find(e):
        union(s,e)
        result+=w
        useEdge+=1

if useEdge==n-1:
    print(total-result)
else:
    print(-1)

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/Graph' 카테고리의 다른 글
  • 미로의 최단거리 통로(BFS 활용)
  • 인접행렬(가중치 방향그래프)
  • 최단거리(다익스트라) vs 최소 신장 트리(크루스칼)
  • [11403] 경로 찾기 (플로이드-워셜)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    플로이드워셜
    큐
    최소신장트리
    이분탐색
    DFS
    스택
    그래프
    최단거리
    DP
    LIS
    그리디
    재귀
    구간합
    프로그래머스
    자료구조
    월간코드챌린지
    구현
    다익스트라
    정렬
    동적계획법
    힙
    덱
    조합
    트리
    Algorithm
    알고리즘
    최대공약수
    BFS
    백준
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[1414] 불우이웃돕기 (MST, 문자열)
상단으로

티스토리툴바