• toc {:toc}

๋ฌธ์ œ

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

  • 1๋ถ€ํ„ฐ N๊นŒ์ง€ย ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด
  • ๊ฐ™์€ ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณจ๋ผ๋„ ๋œ๋‹ค.
  • ๊ณ ๋ฅธ ์ˆ˜์—ด์€ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์ด์–ด์•ผ ํ•œ๋‹ค.
    • ๊ธธ์ด๊ฐ€ K์ธ ์ˆ˜์—ด A๊ฐ€ Aย โ‰ค Aย โ‰ค โ€ฆ โ‰ค Aย โ‰ค A๋ฅผ ๋งŒ์กฑํ•˜๋ฉด, ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ผ๊ณ  ํ•œ๋‹ค. (์ด์ „ ์ˆ˜๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.)

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

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

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

ํ’€์ด

ํ˜„์žฌ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ์ˆ˜๊ฐ€ ์ด์ „ ์ˆ˜๋ณด๋‹ค ์ž‘๋‹ค๋ฉด pass ํ•œ๋‹ค.

์ด์™ธ์—๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น์„ ๊ตฌํ˜„ํ•œ๋‹ค.

#include <bits/stdc++.h>
using namespace std;
 
int n, m;
int num[10];
int is_used[10][10];
 
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; // ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด
        if(cur!=0 && num[cur-1] > 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();
    cin.tie(0);
    cin >> n >> m;
    func(0, 0);
    return 0;
}

์ •๋‹ต์ฝ”๋“œ

์‹œ์ž‘์ง€์ ์„ ์žฌ์„ค์ •ํ•ด์ฃผ๋ฉด์„œ ์ค‘๋ณต์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๊ทธ๋ฆฌ๊ณ  arr[k-1]๋กœ ์„ค์ •ํ•˜๋ฉด์„œ ์ด์ „ ์ˆ˜๋ณด๋‹ค ๋” ์ž‘์ง€ ์•Š๋„๋ก ์„ค์ •ํ•œ๋‹ค.

// Authored by : BaaaaaaaaaaarkingDog
// Co-authored by : -
// http://boj.kr/a237cd7949004a76aa9ac3cf1b13c03c
#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;
  }
  int st = 1; // ์‹œ์ž‘์ง€์ , k = 0์ผ ๋•Œ์—๋Š” st = 1
  if(k != 0) st = arr[k-1]; // k != 0์ผ ๊ฒฝ์šฐ st = arr[k-1]
  for(int i = st; 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);
}