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

[๋ฐฑ์ค€,c++] 9489๋ฒˆ - ์‚ฌ์ดŒ

by ์•ˆ์ฃผํ˜• 2022. 7. 26.

๋ฌธ์ œ

 

9489๋ฒˆ: ์‚ฌ์ดŒ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๋…ธ๋“œ์˜ ์ˆ˜ n๊ณผ ์‚ฌ์ดŒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 1,000, 1 ≤ k ≤ 1,000,000) ๋‹ค์Œ ์ค„

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;

int graph[1000001];
vector<int> idx;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n, k;
    while(cin>>n>>k){
        if(n==0 && k==0) break;
        
        int parent_idx = -1, before = 0, ans = 0;
        for(int i=0; i<n; i++){
            int inp; cin>>inp;
            idx.push_back(inp);
            
            if(i==0){
                before = inp;
                graph[inp] = inp;
            }
            else{
                if(before+1 == inp){
                    graph[inp] = idx[parent_idx];
                    before = inp;
                }
                else{
                    before = inp;
                    graph[inp] = idx[++parent_idx];
                }
            }
        }
        for(int node: idx){
            if(graph[graph[node]] == graph[graph[k]] && graph[node] != graph[graph[k]] && graph[node]!= graph[k] && graph[k] != graph[idx[0]]) ans++;
        }     
        cout<<ans<<'\n';
        idx.clear();
        memset(graph,0,sizeof(graph));      
    }   
}

 

ํ’€์ด

์ž…๋ ฅ์ด ์กฐ๊ธˆ ๊นŒ๋‹ค๋กญ๊ฒŒ ๋“ค์–ด์™€์„œ ์ž…๋ ฅ ์ฒ˜๋ฆฌ์— ๊ฝค ๊ณต์„ ๋“ค์˜€๋˜ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. 

์ž…๋ ฅ๋งŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๊ทธ ์ดํ›„๋Š” ์–ด๋ ต์ง€์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดŒ ๋…ธ๋“œ๋ž€ ํ˜„์‹ค์˜ ๋œป ๊ทธ๋Œ€๋กœ ๋ถ€๋ชจ๋Š” ๋‹ค๋ฅด์ง€๋งŒ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋Š” ๊ฐ™์€ ๋…ธ๋“œ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ(15)์˜ ์‚ฌ์ดŒ๋“ค

์œ„ ์ด๋ฏธ์ง€์—์„œ 15์˜ ์‚ฌ์ดŒ ๋…ธ๋“œ๋“ค์€ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€ 8, 9, 30, 31, 32๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์—ฃ์ง€์ผ€์ด์Šค๋Š” 3, 4, 5์ž…๋‹ˆ๋‹ค. 3, 4, 5 ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ์‚ฌ์ดŒ์ด ์•„๋‹ˆ๋ผ ์‚ผ์ดŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ์—์„œ ๊ฑธ๋Ÿฌ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

for(int node: idx){
	if(graph[graph[node]] == graph[graph[k]] && graph[node] != graph[graph[k]] && graph[node]!= graph[k] && graph[k] != graph[idx[0]]) ans++;
}

์ €๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค๋งˆ๋‹ค ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•ด์ค€ ๋’ค, ์œ„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์ดŒ์ธ์ง€ ํŒ๋ณ„ํ•˜์—ฌ ์ •๋‹ต์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€