본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/유니온 파인드

(5)
[백준 / BOJ] 4195 친구네트워크 (Java) 문제 출처 : https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 민혁이는 소셜 네트워크에서 친구 만드는걸 좋아한다. 어떤 사이트의 친구관계가 주어졌을때, 해당 친구관계에 포함되어있는 친구의 수를 출력하는 프로그램을 만드는 문제다. 풀이 친구관계가 최대 10만까지 갈수있으므로, 매 쿼리마다 모든 노드를 탐색하면, O(N^2)의 시간복잡도가나와 TLE를 받게된다. 문제를 풀기위해 유니온파인드를 사용해야했다. 문제의 노드정보가 문자열로 주어..
[백준 / BOJ] 1202 보석 도둑 - (유니온 파인드, 이분탐색) 문제 출처 : https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 상덕이는 보석을 털기로 결심했다. 보석점에 총 N개의 보석이 있고, 각 보석은 M의 무게, V의 가격을 갖고있다. 상덕이는 K개의 가방을 갖고있고, 각 가방에는 최대 Ci무게의 보석을 담을수있다. 이때, 각 가방에는 최대 한개의 보석만 담을수있다. 상덕이가 홈칠수있는 보석의 최대 가격을 출력하는 문제다. 풀이 보석의 수 N..
[백준 / BOJ] 10775 공항 문제 출처 : www.acmicpc.net/problem/10775 10775번: 공항 예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불 www.acmicpc.net 공항에 G개의 게이트가 있으며, P개의 비행기가 순서대로 들어온다. 각 비행기는 1~Pi번째 게이트에 도킹할수있으며, 만약 1~Pi번째 게이트가 다른비행기로 차있어 도킹하지못한다면, 공항이 폐쇄된다. 공항이 폐쇄되기 전까지 최대 몇개의 비행기를 도킹할수있는가 구하는 문제다. 풀이 유니온 파인드를 이용해 풀은 문제다. 비행기와 게이트가 최대 10만까지 갈수있으므로,..
[백준 / BOJ] 16562 친구비 문제 출처 : www.acmicpc.net/problem/16562 16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. ( www.acmicpc.net 학생수N과 학생들의 친구관계수 M, 현재 가지고 있는 돈 K가 주어진다. 학생들과 친구를 하기위해선 일정한 금액을 내야한다. 준석이는 자신이 갖고있는 돈 K로 모든 학생과 친구를 할수없을수도있기때문에, 친구의 친구는 친구다 를 이용하기로했다. 이때, 준석이가 모든 학생과 친구를 하기위해 들어가는 최소비용을 출력하는 문제다. 모든 학생과 친구를 할수없으..
[백준 / BOJ] 14595 동방 프로젝트 (Large) 문제 출처 : www.acmicpc.net/problem/14595 14595번: 동방 프로젝트 (Large) 첫 번째 행동으로 1번과 2번 방이 합쳐져 (1, 2), (3), (4), (5) 상태가 된다. 이후 두 번째 행동으로 2, 3, 4번 방이 합쳐져 (1, 2, 3, 4), (5)의 상태가 된다. 따라서 남아있는 동방의 수는 2가 된다. www.acmicpc.net 동아리방을 합치는 연산이 여러번 주어졌을때, 이 연산이 모두 끝난후, 남아있는 방의 수를 출력하는 문제다. 풀이 시간초과를 피하기위해 유니온파인드를 이용해서 풀어야한다. 방이 총 5개있을때, 각 방은 이런식으로 떨어져있을것이다. (예제 1) 이때, 1번방과 2번방을 합치는 연산을하면 1번방과 2번방은 같은방이되는데, 그걸 이렇게 연결..