티스토리 뷰

알고리즘/백준

[백준] 6603번 로또

JeongHyeon 2018. 3. 4. 19:03

문제

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

풀이과정

문제를 다 읽어본 후 [완전탐색] 문제라는걸 알았는데 DFS로 구현해야하는 문제인지는 잘 몰랐다. 풀이를 찾아서 DFS 구현을 봤는데 잘 이해가 가지 않는다.

DFS로 탐색을 하다가 6개가 모이면 출력을 하는 식인데 이러한 과정이 어떻게 진행되는지 정확하게 이해를 하지 못했다.

인프런 강의와 다른 강의를 좀 더 찾아서 DFS를 이용한 완탐 구현을 좀 더 공부하고 다시 풀어봐야겠다.

소스코드

#include <iostream>
#include <vector>

#define MAX_N 13
using namespace std;

int S[MAX_N];
int lotto[MAX_N];
int k;

void lotto_print()
{
    for (int i = 0; i < 6; i++) cout << lotto[i] << " ";
    cout << "\n";
}

void DFS(int start,int depth)
{
    if (depth == 6) lotto_print(); // 6개면 출력

    // 6개가 쌓이기 전에
    for (int i = start; i < k; i++)
    {
        lotto[depth] = S[i];
        DFS(i + 1, depth + 1);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    do
    {
        cin >> k;

        for (int i = 0; i < k; i++)
        {
            int tmp; 
            cin >> tmp;
            S[i] = tmp;
        }

        DFS(0,0);

        cout << "\n";

    } while (k != 0);

    return 0;
}

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

[백준] 10974번 모든 순열  (0) 2018.03.04
[백준] 10972번 다음 순열  (0) 2018.03.04
[백준] 1517번 버블 소트  (0) 2018.02.19
[백준] 1891번 사분면  (0) 2018.02.17
[백준] 1074번 Z  (0) 2018.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함