본문 바로가기

알고리즘/BOJ

15663번

15663번 - N과M (9)


N과 M 시리즈는 같은 문제인 듯 달라서 헷갈린다.


N과 M (10)을 풀고 (9)를 풀었다. 처음에는 (9) 번에서 막혔었다..


아이디어는 같은 depth 에서 같은 숫자를 사용하면 안된다는 것! 그래서 check 배열을 만들어서 1~10000까지 숫자를 사용했는지를 체크.


그리고 used 배열을 통해서 특정 인덱스를 사용했는지 안했는지를 체크했다.


<정답 코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
#include<algorithm>
 
using namespace std;
int num[8];
int used[8];
int op[8];
int n, k;
void go(int depth,int before)
{
    if (depth == k)
    {
        for (int i = 0; i < k; i++)
            cout << op[i] << " ";
        cout << endl;
        return;
    }
 
    int check[10001= { 0, };
    for (int i = 0; i < n; i++)
    {
        if (!check[num[i]] && !used[i])
        {
            used[i] = true;
            check[num[i]] = 1;
            op[depth] = num[i];
            go(depth + 1, i);
            used[i] = false;
        }
    }
}
int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> num[i];
    
    sort(num, num + n);
 
    go(0,-1);
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

15486번  (0) 2018.10.07
15658번  (0) 2018.10.07
15684번  (0) 2018.09.06
1938번  (0) 2018.08.30
2665번  (0) 2018.08.30