Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코루틴 컨텍스트
- Spring Batch
- Value too long for column
- terminal
- 티스토리챌린지
- kotlin
- PersistenceContext
- PytestPluginManager
- k8s #kubernetes #쿠버네티스
- JanusGateway
- table not found
- 겨울 부산
- mp4fpsmod
- python
- JanusWebRTCGateway
- 오블완
- 깡돼후
- JanusWebRTCServer
- pytest
- tolerated
- 달인막창
- 코루틴 빌더
- 개성국밥
- vfr video
- 자원부족
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- VARCHAR (1)
- taint
- preemption #
- JanusWebRTC
Archives
너와 나의 스토리
(BOJ) 10775 공항 본문
반응형
문제: https://www.acmicpc.net/problem/10775
문제 설명:
G개의 게이트가 있고, P개의 비행기가 순서대로 도착할 예정이다.
도착한 비행기에게 주어진 값 gi이하의 게이트에만 비행기를 도킹할 수 있고,
이미 다른 비행기가 도킹한 곳에 도킹할 수 없다.
그리고
"이렇게 공항을 운영할 경우 간혹 비행기가 어떤 곳에도 도킹하지 못하는 사고가 발생한다. 이러한 사고가 일어나면 공항의 평판이 급속히 나빠져, 이후 어떤 비행기도 도착하지 않으려 할 것이다."
ㄴ> 어떤 곳에도 도킹하지 못하게 되면 지금껏 도킹한 비행기 수 출력하고 끝!
문제 풀이:
일단 가장 많이 비행기를 도킹하려면 도킹 할 수 있는 곳 중 가장 큰 수의 게이트에 도킹해야한다.
주어진 gi부터 1까지 빈 곳을 항상 다 찾으면 오래 걸리니까 다음 도킹 가능한 곳을 기록한다. <- union-find
만약 gi=3인 비행기가 들어왔다면 p[3]=2;를 해준다 (다음에 또 gi=3인 비행기가 들어오면 2번 gate에 도킹 가능하다는 뜻)
그 후, gi=2인 비행기가 들어왔다면 p[2]=1, 또 gi=2인 비행기가 들어왔다면 p[1]=0;
p[2]가 아니라 p[1]인 이유는 현재 비행기가 도킹한 곳이 p[1]이기 때문!
다음에 gi가 3이하인 비행기가 들어오면 find(gi)한 값은 0일 것이다. 0이면 도킹 가능한 곳이 없다는 뜻이므로 현재까지 도킹한 비행기 수 출력하고 리턴
소스코드:
int n, m,p[100001],cnt;
int find(int x) {
if (p[x] < 0) return x;
return p[x]=find(p[x]);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
cin >> n >> m;
memset(p, -1, sizeof(p));
for (int i = 0; i < m; i++) {
int a;
cin >> a;
int tmp = find(a);
if (tmp == 0) break;
cnt++;
p[tmp] = tmp - 1;
}
cout << cnt << '\n';
return 0;
}
반응형
'Algorithm > Union-Find' 카테고리의 다른 글
[BOJ] 2468 안전 영역 - BFS / Union-Find (0) | 2020.03.27 |
---|---|
(BOJ) 15789 CTP 왕국은 한솔 왕국을 이길 수 있을까? (0) | 2019.05.14 |
Comments