본문 바로가기

PS/boj

백준 2026 소풍

 

#include <stdio.h>
#include<queue>
#include<iostream>
#include<stack>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
void fast_io() {
  cin.tie(0)->sync_with_stdio(0);
}
int K,N,F;
bool chk[901][901];
bool solve=false;
int arr[63];
void dfs(int now){
    if(solve) return;
    if(now==K){
        solve=true;
        for(int x=0;x<K;x++) cout<<arr[x]<<'\n';
        return;
    }
    if(now==0){
        for(int x=1;x<=N;x++){
            arr[0]=x;
            dfs(now+1);
        }
    }
    else{
        for(int x=arr[now-1]+1;x<=N;x++){
            bool chk2=true;
            for(int y=0;y<now;y++){
                if(!chk[x][arr[y]]) chk2=false;
            }
            if(chk2){
                arr[now]=x;
                dfs(now+1);
            }
        }
    }
}
int main(){
    fast_io();
    cin>>K>>N>>F;
    for(int x=0;x<F;x++){
        int src,dst;
        cin>>src>>dst;
        chk[src][dst]=true;
        chk[dst][src]=true;
    }
    dfs(0);
    if(!solve) cout<<-1;
}

http://www.acmicpc.net/problem/2026 

 

2026번: 소풍

만약 K명의 친구 관계인 학생들이 존재하지 않는다면 -1을 출력한다. 그 외의 경우에는, K개의 줄에 학생들의 번호를 증가하는 순서로 한 줄에 한 개씩 출력한다. 여러 경우가 존재한다면 첫 번째

www.acmicpc.net

재귀를 이용해 푸는 문제였습니다.

친구관계는 상호적이기때문에 어떤 특정 K개의 학생으로 이루어진 친구관계가 존재할경우 정답이 될 수 있는 친구관계는 순서가 정해져있게됩니다. 또한 현재 I명의 학생들이 서로 친구관계라고 할때 다른 학생 A가 I명과 친구일경우 I+1명의 친구관계가 생기게 됩니다. 이를 이용해서 재귀적으로 구현하면 됩니다.

 

'PS > boj' 카테고리의 다른 글

백준 16965 구간과 쿼리  (0) 2023.01.01
백준 16719 ZOAC  (0) 2022.09.11
백준 20946 합성인수분해  (0) 2022.08.31
백준 1016 제곱 ㄴㄴ 수  (0) 2022.08.22
백준 20917 사회적 거리 두기  (0) 2022.08.14