• toc {:toc}

๋ฌธ์ œ

์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ธธ์ด๊ฐ€ M์ธ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  • 1๋ถ€ํ„ฐ N๊นŒ์ง€ย ์ž์—ฐ์ˆ˜ ์ค‘์—์„œย M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด
  • ๊ฐ™์€ ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณจ๋ผ๋„ ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค M โ‰ค N โ‰ค 7)

์ถœ๋ ฅ

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ถœ์ฒ˜: https://www.acmicpc.net/problem/15651

ํ’€์ด

์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•œ ๊ฐ€์ง“์ˆ˜๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฌธ์ œ

is_used๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ์„ ํƒ๋์„ ๋•Œ ํ™•์ธํ•˜๋Š” ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

โ‡’ m๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ๋•Œ 1๋ฒˆ์งธ ์ˆซ์ž ์„ ํƒ โ†’ fixed+1

2์ฐจ์› is_used์— fixed๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์—ฌ ์„ ํƒํ–ˆ๋‹ค.

#include <bits/stdc++.h>
using namespace std;
 
// ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์—ฌ ์„ ํƒ
int n, m;
int num[10];
int is_used[10][10];
int fixed=0;
 
void func(int cur, int fixed){
    if(cur == m){
        for(int i = 0; i < m; i++){
            cout << num[i] << ' ';
        }
        cout << '\n';
        return;
    }
    for(int i = 1; i <= n; i++){
        if(is_used[fixed][i]) continue;
        is_used[fixed][i] = 1;
        num[cur] = i;
        func(cur+1, fixed+1);
        is_used[fixed][i] = 0;
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    func(0,0);
    return 0;
}

์ •๋‹ต์ฝ”๋“œ

๊ทธ๋ƒฅ k๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์ค‘๋ณต๋œ๋‹ค. (๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๋‹คโ€ฆ.)

์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์„ ๋•Œ ํ•„์š”ํ•œ ๋ถ€๋ถ„

// Authored by : BaaaaaaaaaaarkingDog
// Co-authored by : -
// http://boj.kr/3220f7e9482f4564bf6d059a406fca47
#include <bits/stdc++.h>
using namespace std;
 
int n, m;
int arr[10];
 
void func(int k){ // ํ˜„์žฌ k๊ฐœ๊นŒ์ง€ ์ˆ˜๋ฅผ ํƒํ–ˆ์Œ.
  if(k == m){ // m๊ฐœ๋ฅผ ๋ชจ๋‘ ํƒํ–ˆ์œผ๋ฉด
    for(int i = 0; i < m; i++)
      cout << arr[i] << ' '; // arr์— ๊ธฐ๋กํ•ด๋‘” ์ˆ˜๋ฅผ ์ถœ๋ ฅ
    cout << '\n';
    return;
  }
  for(int i = 1; i <= n; i++){    
    arr[k] = i; // k๋ฒˆ์งธ ์ˆ˜๋ฅผ i๋กœ ์ •ํ•จ
    func(k+1); // ๋‹ค์Œ ์ˆ˜๋ฅผ ์ •ํ•˜๋Ÿฌ ํ•œ ๋‹จ๊ณ„ ๋” ๋“ค์–ด๊ฐ
  }
}
 
int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  func(0);
}