[백준 6603번] 로또

2017. 7. 5. 23:31알고리즘/백준

반응형





풀이


출력예시를 보면 마지막 숫자부터 바뀌는 것을 보면 DFS로 풀 수 있다는 것을 알 수 있다.

현재위치와 스택에 쌓인 카운트를 세주면서 방문여부를 체크해 주면 된다.


로직

1. 0번지에서 시작한다.

2. 0번지 방문을 체크하고, 카운트를 1 증가시켜준다.

3. 1번지로 이동한다.

4. 1번지 방문을 체크하고, 카운트를 1 증가시켜준다.

5. 1~4번 항목을 반복하여 카운트가 6인 경우 방문 배열을 체크하여 방문이 체크가 된 index만 출력한다.

6. 방문 체크를 해제해 주고, 카운트를 증가시키지 않은 상태에서 오른쪽으로 한칸 이동후 반복한다.






소스코드


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
#include <iostream>
using namespace std;
 
int n, arr[20], visit[20];
 
void select_fn(int cur, int cnt) {  // cur -> 현재 pos, cnt -> 쌓은 갯수
    if (cur == n && cnt == 6) {
        for (int i = 0; i < n; i++) { if (visit[i] == 1) { cout << arr[i] << " "; } }
        cout << '\n';
    }
    if (cur == n) return;
    visit[cur] = 1;
    select_fn(cur+1, cnt+1);  // 오른쪽으로 한칸이동, 쌓은갯수+1
    visit[cur] = 0;  // 위에서 방문을 완료했기에 방문 초기화
    select_fn(cur+1, cnt);  // 현재 위치만 오른쪽으로 한칸이동후 재탐색
}
 
int main() {
    while (1) {
        cin >> n;
        if (n == 0)
            return 0;
        else {
            for (int i = 0; i < n; i++) {
                cin >> arr[i];
            }
            visit[20= { 0, }; //방문 초기화
            select_fn(00);
        }
        cout << '\n';
    }
    return 0;
}
cs




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
44
45
#include <iostream>
using namespace std;
 
int num[50], n, Stack[6], sp=0;
 
void push(int a) {
    Stack[sp++= a;
}
 
int pop() {
    return Stack[--sp];
}
 
void lotto(int cur) {
    if (sp == 6) {
        for (int i = 0; i < 6; i++) {
            cout << Stack[i] << " ";
        }
        cout << '\n';
        return;
    }
    else {
        for (int i = cur; i < n; i++) {
            push(num[i]);
            lotto(i+1);
            pop();
        }
    }
}
 
int main() {
    while (1) {
        cin >> n;
        if (!n)
            break;
        else {
            for (int i = 0; i < n; i++) {
                cin >> num[i];
            }
            lotto(0);
            cout << '\n';
        }
    }
    return 0;
}
cs


반응형

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

[백준 2580번] 스도쿠  (0) 2017.07.13
[백준 2161번] 카드1  (0) 2017.07.05
[백준 10026번] 적록색약  (0) 2017.07.03
[백준 2206번]벽 부수고 이동하기  (0) 2017.07.02
[백준 2455번] 지능형 기차  (0) 2017.06.30