순열은 순서가 있고 조합은 순서가 없다
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 |