๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 10775๋ฒˆ - ๊ณตํ•ญ

by dkswnkk 2022. 9. 2.

๋ฌธ์ œ

 

10775๋ฒˆ: ๊ณตํ•ญ

์˜ˆ์ œ 1 : [2][?][?][1] ํ˜•ํƒœ๋กœ ๋„ํ‚น์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 3๋ฒˆ์งธ ๋น„ํ–‰๊ธฐ๋Š” ๋„ํ‚น์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. ์˜ˆ์ œ 2 : [1][2][3][?] ํ˜•ํƒœ๋กœ ๋„ํ‚น ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , 4๋ฒˆ์งธ ๋น„ํ–‰๊ธฐ๋Š” ์ ˆ๋Œ€ ๋„ํ‚น ์‹œํ‚ฌ ์ˆ˜ ์—†์–ด์„œ ์ดํ›„ ์ถ”๊ฐ€์ ์ธ ๋„ํ‚น์€ ๋ถˆ

www.acmicpc.net

 

์ฝ”๋“œ

#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์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€