알고리즘/백준
[백준]10775 공항(Python)
cha_eyoon
2024. 1. 23. 11:06
https://www.acmicpc.net/problem/10775
10775번: 공항
예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불
www.acmicpc.net
문제 접근
우선 도킹이 무엇인가..? 처음엔 문제가 잘 이해가 되지 않았다..
1. 게이트가 4개 있고, 비행기 3대가 4, 1, 1 순으로 들어온다고 하면, 4와 1 최대 2대 도킹 가능
2. 게이트가 6개 있고, 비행기 6대가 2, 2, 3, 3, 4, 4 순으로 들어온다고 하면, 2, 3, 4 최대 3대 도킹 가능
근데 이게 유니온 파인드 문제라는 게 잘 와닿지 않았다.
코드
import sys
sys.setrecursionlimit(1000000) # 재귀 깊이 제한 늘리기
input = sys.stdin.readline
# 찾기 연산(같은 집합에 속하는지 확인)
def find_parent(x):
if parents[x] != x:
parents[x] = find_parent(parents[x])
return parents[x]
# 합집합 연산(두 집합을 합치기 위한 함수)
def union_parent(a, b):
a = find_parent(a)
b = find_parent(b)
if a < b:
parents[b] = a
else:
parents[a] = b
# 게이트 개수
G = int(input())
# 비행기 개수
P = int(input())
# 부모 테이블
parents = [i for i in range(G+1)]
# 들어오는 비행기
plane = []
for _ in range(P):
plane.append(int(input()))
count = 0
for k in plane:
a = find_parent(k)
# 더 이상 도킹 불가능
if a == 0:
break
# 해당 게이트와 그 이전 번호의 게이트 연결
union_parent(a, a-1)
count += 1
print(count)
참고
[백준] 10775. 공항 (파이썬/python)
Union Find 알고리즘
velog.io