-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold II] Title: 공항, Time: 12 ms, Memory: 3308 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
86 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# [Gold II] 공항 - 10775 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/10775) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 3308 KB, 시간: 12 ms | ||
|
||
### 분류 | ||
|
||
자료 구조, 분리 집합, 그리디 알고리즘 | ||
|
||
### 제출 일자 | ||
|
||
2024년 3월 27일 03:05:52 | ||
|
||
### 문제 설명 | ||
|
||
<p>오늘은 신승원의 생일이다.</p> | ||
|
||
<p>박승원은 생일을 맞아 신승원에게 인천국제공항을 선물로 줬다.</p> | ||
|
||
<p>공항에는 G개의 게이트가 있으며 각각은 1에서 G까지의 번호를 가지고 있다.</p> | ||
|
||
<p>공항에는 P개의 비행기가 순서대로 도착할 예정이며, 당신은 i번째 비행기를 1번부터 g<sub>i</sub> (1 ≤ g<sub>i</sub> ≤ G) 번째 게이트중 하나에 영구적으로 도킹하려 한다. 비행기가 어느 게이트에도 도킹할 수 없다면 공항이 폐쇄되고, 이후 어떤 비행기도 도착할 수 없다.</p> | ||
|
||
<p>신승원은 가장 많은 비행기를 공항에 도킹시켜서 박승원을 행복하게 하고 싶어한다. 승원이는 비행기를 최대 몇 대 도킹시킬 수 있는가?</p> | ||
|
||
### 입력 | ||
|
||
<p>첫 번째 줄에는 게이트의 수 G (1 ≤ G ≤ 10<sup>5</sup>)가 주어진다.</p> | ||
|
||
<p>두 번째 줄에는 비행기의 수 P (1 ≤ P ≤ 10<sup>5</sup>)가 주어진다.</p> | ||
|
||
<p>이후 P개의 줄에 g<sub>i</sub> (1 ≤ g<sub>i</sub> ≤ G) 가 주어진다.</p> | ||
|
||
### 출력 | ||
|
||
<p>승원이가 도킹시킬 수 있는 최대의 비행기 수를 출력한다.</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <vector> | ||
using namespace std; | ||
|
||
vector<int> parent; | ||
int p, g; | ||
|
||
int Find(int x) { | ||
if (parent[x] == x) return x; | ||
return parent[x] = Find(parent[x]); | ||
} | ||
|
||
void Union(int a, int b) { | ||
a = Find(a); | ||
b = Find(b); | ||
if (a < b) parent[b] = a; | ||
else parent[a] = b; | ||
} | ||
|
||
int main() | ||
{ | ||
ios_base::sync_with_stdio(0); | ||
cin.tie(0); | ||
//freopen("input.txt", "r", stdin); | ||
|
||
cin >> g >> p; | ||
vector<int> arr(p, 0); | ||
for (int i = 0; i < p; i++) { | ||
cin >> arr[i]; | ||
} | ||
|
||
for (int i = 0; i <= g; i++) { | ||
parent.push_back(i); | ||
} | ||
|
||
int cnt = 0; | ||
for (int i = 0; i < p; i++) { | ||
int gate = Find(arr[i]); | ||
if (gate == 0) break; | ||
Union(gate, gate-1); | ||
cnt++; | ||
} | ||
cout << cnt; | ||
return 0; | ||
} |