๋ฌธ์
์ฝ๋
#include <iostream>
using namespace std;
int parent[100001];
int G, P, ans;
int find(int x){
if(x == parent[x]) return x;
else return parent[x] = find(parent[x]);
}
void union_parent(int a, int b){
a = find(a);
b = find(b);
parent[a] = b;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
for(int i=0; i<=100000; i++) parent[i] = i;
cin>>G>>P;
for(int i=1; i<=G; i++){
int gate; cin>>gate;
if(find(gate) == 0) break;
else{
ans++;
union_parent(find(gate), find(gate)-1);
}
}
cout<<ans;
}
ํ์ด
์ฒ์์ ๋ฌธ์ ์ดํด๊ฐ ์ ์ ๊ฐ์ต๋๋ค.
๊ณตํญ์๋ P๊ฐ์ ๋นํ๊ธฐ๊ฐ ์์๋๋ก ๋์ฐฉํ ์์ ์ด๋ฉฐ, ๋น์ ์ i๋ฒ์งธ ๋นํ๊ธฐ๋ฅผ 1๋ฒ๋ถํฐ gi (1 ≤ gi ≤ G) ๋ฒ์งธ ๊ฒ์ดํธ ์ค ํ๋์ ์๊ตฌ์ ์ผ๋ก ๋ํนํ๋ ค ํ๋ค. ๋นํ๊ธฐ๊ฐ ์ด๋ ๊ฒ์ดํธ์๋ ๋ํนํ ์ ์๋ค๋ฉด ๊ณตํญ์ด ํ์๋๊ณ , ์ดํ ์ด๋ค ๋นํ๊ธฐ๋ ๋์ฐฉํ ์ ์๋ค.
์ด ๋ง์ g๊ฐ 3์ด๋ผ๋ฉด ๋นํ๊ธฐ๊ฐ 1, 2, 3 ์ค ํ ๊ตฐ๋ฐ ๋ํนํ ์ ์๊ณ , ๋ง์ฝ ๋ํน ๊ฐ๋ฅํ ๊ณณ ์ ๋ถ๊ฐ ์ด๋ฏธ ๋นํ๊ธฐ๋ก ๊ฝ ์ฐจ์๋ค๋ฉด ๋ ์ด์ ์๋ฌด ๋นํ๊ธฐ๋ ๋ํนํ์ง ๋ชปํ๊ณ ๊ณตํญ์ ํ์ํ๋ค๋ ๋ง์ ๋๋ค.
ํ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์ ํ์ด๋ฅผ ๋ณด๊ณ ํด๊ฒฐํ๋๋ฐ ๊ต์ฅํ ๋ ํนํ ํ์ด์์ต๋๋ค.
๋ํนํ ๋ g๋ฒ์ ๋ ธ๋์ g-1 ๋ ธ๋๋ฅผ ํฉ์น๋ ์์ด๋์ด์ธ๋ฐ, ํด๊ฒฐ ๋ฐฉ๋ฒ์ g๋ฒ ๊ฒ์ดํธ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ํน์ํค๋ ๊ฒ์ ๋๋ค. g๋ฒ์ด ์ฐจ์์ผ๋ฉด g-1, g-2, ... ,1๋ฒ๊น์ง ๋ํนํ ํ 1๋ฒ๋ ์ฐจ์์ผ๋ฉด ์ข ๋ฃํฉ๋๋ค.
๋ง์ฝ g๋ฒ์ ๋ ธ๋๊ฐ 0์ด ์๋๋ผ๋ฉด ๋ํนํ ์ ์๋ค๋ ๊ฒ์ดํธ๊ฐ ์ ์ด๋ ํ ๊ฐ๋ ๋จ์๋ค๋ ์๋ฏธ๊ฐ ๋์ด ๋ํน์ํค๊ณ , 0์ด๋ฉด ์ข ๋ฃํ๋ ํ์ด์ ๋๋ค.
์์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
4
6
2
2
3
3
4
4
์์ ๊ฐ์ ์ ๋ ฅ์์ ์ ค ์ฒ์ ์ด๊ธฐ๊ฐ์ ์ธํ ํ๊ณ ๋๋ฉด parent ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- parent[1] = 1, parent[2] = 2, parent[3] = 3, parent[4] = 4, parent[5] = 5, parent[6] = 6
์ด์ g ์ ๋ ฅ ์์๋๋ก ์ดํด๋ณด๋ฉด ์ ค์ฒ์ g๊ฐ 2์ผ ๊ฒฝ์ฐ union_parent(2, 1)์ ์ํํฉ๋๋ค. ์ํํ๊ฒ ๋๋ฉด parent[2] = 1์ด ๋ฉ๋๋ค.
- parent[1] = 1, parent[2] = 1, parent[3] = 3, parent[4] = 4, parent[5] = 5, parent[6] = 6
๋ค์ ์ ๋ ฅ๋ g๊ฐ 2๊ฐ ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค. union_parent(1, 0)์ ์ํํฉ๋๋ค. ์ํํ๊ฒ๋๋ฉด parent[1] = 0์ด ๋ฉ๋๋ค.
- parent[1] = 0, parent[2] = 1, parent[3] = 3, parent[4] = 4, parent[5] = 5, parent[6] = 6
๋ค์์ g๊ฐ 3์ด ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค. union_parent(3, 2)์ ์ํํฉ๋๋ค. ์ํํ๊ฒ๋๋ฉด parent[3] = 2๊ฐ ๋ฉ๋๋ค.
- parent[1] = 0, parent[2] = 1, parent[3] = 2, parent[4] = 4, parent[5] = 5, parent[6] = 6
๋ค์๋ g๊ฐ 3์ด ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค. find(3) = 0์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ข ๋ฃํฉ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 17136๋ฒ - ์์ข ์ด ๋ถ์ด๊ธฐ (0) | 2022.09.06 |
---|---|
[๋ฐฑ์ค,c++] 2533๋ฒ - ์ฌํ๋ง ์๋น์ค(SNS) (0) | 2022.09.04 |
[๋ฐฑ์ค,c++] 15681๋ฒ - ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (0) | 2022.09.04 |
[๋ฐฑ์ค,c++] 4195๋ฒ - ์น๊ตฌ ๋คํธ์ํฌ (0) | 2022.09.02 |
[๋ฐฑ์ค,c++] 18116๋ฒ - ๋ก๋ด ์กฐ๋ฆฝ (0) | 2022.09.02 |
[๋ฐฑ์ค,c++] 17144๋ฒ - ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2022.09.02 |
๋๊ธ