본문 바로가기
알고리즘

순열과 조합 (로또 : 6603) 백준

by kcj3054 2021. 8. 23.

순열은 순서가 있고 조합은 순서가 없다

ex :
1 2 3 , 3 2 1은 순열에서 순서가 중요가 하기에 다른 수 지만 조합에서는 뽑았다는 '의미'에서 동일하기에 같은 수로 본다

dfs 재귀 스택프레임

void dfs(int idx) {

    ans.push_back(v[idx]);

    if (ans.size() == 6) {

        for (auto a : ans) cout << a << " ";
        cout << endl;
        ans.pop_back();
        return ;
    }

    for (int i = idx + 1; i < v.size(); i++)
    {
        dfs(i);
    }

    ans.pop_back();
}
int main() {


    while (true)
    {
        int n = 0;  cin >> n;
        if (n == 0) break;
        v.resize(n);
        for (auto& a : v) cin >> a;
        dfs(0);

    }
    return 0;
}

헷갈린 부분

이 코드에서 로또 번호 6개를 뽑으면 된다 여기서 엄청 헷갈렸던 것이 pop_back()이 두개라서 매우 헷갈렸다.

첫번째 pop_back()

여기서 pop_back()은 수가 1 2 3 4 5 6 7 까지있는데
현재 1 2 3 4 5 6까지 선택했다면 다음은 6을빼고 7을 넣자는거지 여기서 스택프레임은 상관이없다.

두번째 pop_back()

이것은 dfs다음으로 이어지는 것이라서 여기서 pop_back이후에 처리 하는 것은 스택에 쌓인 dfs호출문들이다

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

백준 15591 MooTube (Silver)  (0) 2021.10.02
백준 6603 로또 (bfs)  (0) 2021.08.23
leetcode , Sliding Window Maximum  (0) 2021.08.19
leetcode 239. Sliding Window Maximum  (0) 2021.08.15
백준 가장 긴 증가하는 부분 수열 4 14002  (0) 2021.08.10