오늘은 완전탐색 문제를 풀다가 사용한 c++의 next_permutation 입니다.
사실 알고리즘 동아리를 할 때, 한번 설명을 들은 적이 있어 알고는 있었는데 대부분의 문제풀이 때 그냥 DFS 완탐 으로 모든 경우의 수를 구해서 문제를 풀어왔었는데요.
오랫만에 문제를 풀어서 그럴수도 있겠지만, 익숙치 않은 IDE 에서 짜다보니 코드가 길어질수록 미세한 실수도 많이 나오고 다른 디버깅 환경에서 그 실수를 찾아내기가 생각보다 오래걸려서 next_permutation도 제대로 알아보고 익숙해져볼 생각입니다.
1. 조건
- next_permutation은 정렬을 조건으로 합니다.
- 물론, 원하는 출력에 따라 조건을 변경해서 출력하면 됩니다.
- 기본적인 5개의 후보로 부터 모든 가능한 5개 사이즈의 조합을 구하는 경우,
이 후보들은 모두 오름차순 정렬이 되어 있어야 합니다. ( ex - 1 2 3 4 5 )
1-1.
- 특수한 상황이지만 기존 배열(벡터)의 상태가 { 7, 5, 1, 2, 3 }일 경우,
7과 5는 앞에 고정된 상태로 1,2,3 만 변경됩니다.
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
vector<int> arr_1{ 1,5,5,7 };
do {
for (int i = 0; i < arr_1.size(); i++) {
cout << arr_1[i] << " ";
}
cout << "\n";
} while (next_permutation(arr_1.begin(), arr_1.end()));
cout << "\n";
return 0;
}
** 잘못된 내용이 있으면 알려주세요 **
'학부생 공부 > C++' 카테고리의 다른 글
(21.05.22) c++ string (0) | 2021.05.23 |
---|---|
(21.05.21) string sort, unordered_map (0) | 2021.05.21 |
C++ memory [heap] (0) | 2020.12.24 |
C++ memory [stack] (0) | 2020.12.22 |
값이 [a,b]인 데이터의 개수를 반환하는 함수 (0) | 2020.10.10 |