728x90

 0. [c++] 백준



https://www.acmicpc.net/problem/15649


 1. 풀이


이 문제는 백트래킹이라는 기법을 활용하는 문제이다.

기본적인 접근은 dfs방식으로 하지만, 접근이 필요없는 가지는 방문을 하지 않아 수행시간을 줄이는 테크닉이라고 생각하면 편하다.


여기서 응용은 bool 배열을 활용해서 방문한 수들을 저장해주어 재방문을 막아주었다.



 2. 소스코드


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
#include<iostream>
 
using namespace std;
 
int N, M;
int arr[10];
bool visited[10];
 
void dfs(const int& length) {
    if (length == M) {
        for (int i = 0; i < M; i++) {
            cout << arr[i] << " ";
        }
        cout << "\n";
        return;
    }
 
    for (int i = 1; i <= N; i++) {
        if (visited[i])
            continue;
        visited[i] = true;
        arr[length] = i;
        dfs(length + 1);
        visited[i] = false;
    }
}
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    cin >> N >> M;
 
    for (int i = 1; i <= N; i++) {
        visited[i] = true;
        arr[0= i;
        dfs(1);
        visited[i] = false;
    }
 
    return 0;
}
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts