๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] 10974 ๋ชจ๋“  ์ˆœ์—ด ๋ฐฑํŠธ๋ž˜ํ‚น

by Jouureee 2021. 2. 27.

๋ฌธ์ œ :

www.acmicpc.net/problem/10974

 

10974๋ฒˆ: ๋ชจ๋“  ์ˆœ์—ด

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

๋ถ„์„ :

์‚ฌ์‹ค ์ „ํ˜€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ๋ธ”๋กœ๊ทธ๋“ค์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ’€์—ˆ๋‹ค. 

dfs๊ฐ€ ๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ž‘ ๊ด€๋ จ์ด ๊นŠ๋‹ค ํ–ˆ๋Š”๋ฐ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์ „์ ์ธ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.

c++ ์—์„  next_permutation์ด๋ผ๋Š” ์ˆœ์—ด ์ฐพ๋Š” ํ•จ์ˆ˜๊ฐ€ <algorithm>์— ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๊ฑธ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฑํŠธ๋ž™ํ‚น ์—ฐ์Šต์„ ์œ„ํ•ด ๋ฐฑํŠธ๋ž™ํ‚น ๋ฐฉ์‹์œผ๋กœ ์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค. 

dfs์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ visit (๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฐ์—ด)์ด ํ•„์š”๋กœ ๋œ๋‹ค.

v vector์— ๋„ฃ์–ด์ฃผ๋Š”๋ฐ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๋„ฃ์–ด์ฃผ๊ณ  ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐฉ๋ฌธ์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ์ฐจ๋ก€ ๋ฐฉ๋ฌธ์„ ์œ„ํ•ด ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ์›์†Œ๋ฅผ ๊บผ๋‚ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  visit ๋ฐฐ์—ด๋„ false๋กœ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต์ด ๋๋‚˜๊ณ  ์ˆœ์—ด input ๊ฐ’ n์— ๋„๋‹ฌํ•˜๋ฉด์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ๋๋‚ด๊ฒŒ ๋œ๋‹ค. 

 

c++ ์ฝ”๋“œ :

//
//  10974_all_ permutation.cpp
//  SOMA๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
//
//  Created by JoSoJeong on 2021/02/27.
//

#include <stdio.h>
#include <iostream>
#include <vector>
#include <string.h>


using namespace std;
vector<int> v;
bool visit[9];
int n;

void make_permu_dfs(){
    if(v.size() == n){ //3
        for(int i = 0; i < n; i++){
            cout << v.at(i) << " ";
        }
        cout << endl;
        return;
    }else{
        for(int i = 1; i <= n; i++){
            if(visit[i] == false){
                visit[i] = true;
                v.push_back(i);
                make_permu_dfs();
                //cout << "pop " << v.back() << endl;
                v.pop_back();
                visit[i] = false;
            }
        }
    }
}

int main(){
    cin >> n;
    memset(visit, false, sizeof(visit));
    make_permu_dfs();
    return 0;
}

๋Œ“๊ธ€