유니온 파인드

    [python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )

    [python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )

    문제를 읽어보면 생각보다 간단하다. 여러개의 섬으로 이루어진 나라가 존재한다. 그리고 2개의 공장이 각 섬에 하나씩 존재한다. 섬들은 서로 중량제한이 있는 다리로 이루어져있다. 따라서 중량제한을 넘지 않고 다리를 건너서 한공장에서 다른 공장으로 물품을 이송해야한다. 이때 공장A에서 공장B로 갈때 얼마나 많은 물품을 한번의 이동시 옮길 수 있는지 출력해야한다. 여기까지 읽고나면 그래프 문제라는 감이 온다. 그런데 A공장에서 B공장까지 가야하기 때문에 여러개의 경로가 존재한다.문제는 다리개수가 100,000개이기 때문에 완탐으로 푸는 미친짓을 해서는 안된다. 천천히 고민해보자 우선 다리를 건너는 비용은 문제가 되지 않는다. A->B로 가기만 하면되고 이때 건너는 다리의 중량한계의 최솟값이 가장 큰 경로를 찾..

    [python3] 백준 4195 (친구 네트워크, 유니온 파인드)

    [python3] 백준 4195 (친구 네트워크, 유니온 파인드)

    문제는 아주 심플하다. 소셜네트워크를 구성할때 서로 친구가 될때마다 해당 네트워크에 몇명이 속하는지 알아내면 된다. 테스트 케이스의 범위는 주어지지 않았지만 F의 값이 100,000으로 주어졌다. 그럼 테스트 케이스 * 100,000으로 상당히 연산량이 클것으로 예상된다. 또한 DFS를 통해 구성된 네트워크의 노드 갯수를 센다고 가정한다면 100,000 * O(N) 정도의 시간 복잡도가 걸리는데 만약 N이 100,000이 된다면 너무 시간복잡도가 크다. 즉, 매번 탐색하는 방식으로는 구할 수가 없다. 그럼 A라는 친구가 어디 네트워크에 속하고, 네트워크의 크기는 어느정도인지 한번에 안다면 우리는 testcase*100,000의 연산만으로 정답을 구할 수 있다. 딱 냄새가 난다 네트워크에 속하고 머시기 어..

    [python3] 프로그래머스 섬 연결하기 ( 그리디, MST, 크루스칼, 유니온 파인드)

    [python3] 프로그래머스 섬 연결하기 ( 그리디, MST, 크루스칼, 유니온 파인드)

    n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 처음에는 그래프 알고리즘을 고민했다. 다익스트라,플로이드를 떠올렸지만 이건 목적지가 존재하는 경우에 사용하는 알고리즘이라 사용불가능 했다. 그러다가 가중치를 기준으로 정렬하여 하나씩 포함하면 되지 않을까 했고 visited 배열을 만들어 노드를 체크해주었다. def solution(n, costs): answer = ..