문제 링크
https://www.acmicpc.net/problem/10775
10775번: 공항
예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불
www.acmicpc.net
Test Case
문제 풀이
union-find문제 인데 완벽하게 이해를 하고 풀지는 못했다.
내가 확실히 이해한 부분은 g_i를 입력받았을 때 최대한 도킹을 많이 하기 위해서는 해당 번호의 게이트로 도킹하는 것이 제일 최선의 방법이라는 점이다.
처음에 문제만 봐서는 union-find 문제인지 알기어렵지만 문제 조건을 보면 G, P의 범위가 매우크기 때문에 일일히 확인하면서 빡구현하면 O(n^2)의 시간 복잡도를 가지게 된다.
0번 노드를 추가해야되는 점도 생각하지못했던 부분이다.
Source Code
import sys
input = sys.stdin.readline
def find_parent(parent,x):
if parent[x] != x:
parent[x] = find_parent(parent,parent[x])
return parent[x]
def union_parent(parent,a,b):
a = find_parent(parent,a)
b = find_parent(parent,b)
if a > b:
parent[a] = b
else :
parent[b] = a
# 탑승구 g
# 비행기 p
g = int(input())
p = int(input())
data = []
for i in range(p):
data.append(int(input()))
parent = [0] * (g+1)
for i in range(g+1):
parent[i] = i
result = 0
for i in range(p):
root = find_parent(parent, data[i])
if root == 0 :
break
union_parent(parent,root, root-1)
result += 1
print(result)
'Develop > algorithm' 카테고리의 다른 글
백준 2887 행성 터널 (Python) (0) | 2021.08.22 |
---|---|
이것이 코딩테스트다 43 어두운 길 (Python) (0) | 2021.08.19 |
이것이 코딩테스트다 41 여행 계획 (Python) (0) | 2021.08.06 |
이것이 코딩테스트다 커리큘럼 (Python) (0) | 2021.07.29 |
백준 1647번 도시 분할 계획 (Python) (0) | 2021.07.29 |