• toc {:toc}

๋ฌธ์ œ

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

  • N๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด

์ž…๋ ฅ

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

๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์ˆ˜๋Š” 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

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

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

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

ํ’€์ด

  1. ์‚ฌ์ „ ์ˆœ โ†’ ์ž…๋ ฅ๋ฐ›์€ val ์ •๋ ฌ
  2. ๊ฐ™์€ ์ˆ˜์—ด์€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ฒŒ โ†’ num[k]==val[i]์ด๋ฉด continue
  3. ์ˆœ์„œ ํฌํ•จ
  4. ๋ฐฑํŠธ๋ ˆํ‚น์œผ๋กœ ์Šค์Šน๋…ธ๋“œ๋กœ ์˜ฌ๋ผ์™”๋‹ค๋ฉด ์ œ์ž๋…ธ๋“œ๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”
#include <bits/stdc++.h>
using namespace std;
 
int n, m;
int val[10];
int num[10];
int is_used[10];
 
void func(int k){
    if(k==m){
        for(int i=0; i<m; i++){
            cout << num[i] << ' ';
        }
        cout << '\n';
        return ;
    }
    for(int i=0; i<n; i++){
        if(is_used[i]) continue;
        if(num[k]!=0 && num[k]==val[i]) continue;
        is_used[i] = 1;
        num[k] = val[i];
        func(k+1);
        is_used[i] = 0;
        if(num[k+1]!=0) num[k+1] = 0; 
        // ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•ด์ฃผ๋ฉด ๋‹ค์Œ ๋ฐฐ์—ด์„ ์ฐพ์„ ๋•Œ ์ค‘๋ณต์ด๋ผ ์ธ์‹ํ•œ๋‹ค.
        // ex)์ด์ „ 1 3 3 ์ •๋‹ต 2 1 3 ์ด๋ฉด k=2์ผ ๋•Œ 3์ด ์„œ๋กœ ์ค‘๋ณต์ด๋ผ ๋‹ค์Œ ๋ฐฐ์—ด์ฐพ๊ธฐ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
				// ๋”ฐ๋กœ ๋ณ€์ˆ˜๋ฅผ ์žก์œผ๋ฉด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”๋ฅผ ์•ˆํ•ด์ค˜๋„ ๋œ๋‹ค. int tmp
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    cin >> n >> m;
    for(int i = 0; i<n; i++){
        cin >> val[i];
    }
    sort(val, val+n);
    func(0);
    return 0;
 
}