2023. 4. 24. 16:02, 알고리즘/BOJ
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int a[4] = { 0,0,1,1 };
do {
for (int i = 0; i < 4; i++)
cout << a[i] << ' ';
cout << '\n';
//조합을 뽑는 경우의 코드
/*for (int i = 0; i < 4; i++) {
if (a[i] == 0)
cout << i + 1<<' ';
}
cout << '\n';*/
} while (next_permutation(a, a + 4));
}
위에 있는 코드는 {0,0,1,1}의 배열에서 순열을 연속적으로 출력하는 코드이다
이 코드의 출력 결과의 경우는
이렇게 나오게 된다.
그래서 이렇게 나오는 next_permutation을 이용해서 어떻게 {1,2,3,4} 의 배열을 이용해서 2개의 원소를 갖는 조합을 뽑는지에 대해서 생각해보자면
여기에 변경될 코드 부분이,
//조합을 뽑는 경우의 코드
/*for (int i = 0; i < 4; i++) {
if (a[i] == 0)
cout << i + 1<<' ';
}
cout << '\n';*/
이렇게 되는데, 이 코드를 위에 결과물과 비교해보면,
0으로 출력된 부분들이 변경될 코드 부분에 의해서 i+1의 형태로 출력이 되고, 1로 출력된 부분들은 출력이 안되고 제외될 부분들이다. 그래서 그 과정을 손으로 작성해서 나열해보면,
1,2
1,3
1,4
2,3
2,4
3,4
형태가 될것이고, 이게 딱 1,2,3,4중에서 2개를 뽑는 조합의 경우의 수들에 해당한다.
만약 1,2,3,4,5중에서 2개를 중복을 뽑는 조합의 경우는 그렇다면 {0,0,0,1,1}에서 next_permutation을 돌리면서
arr[i]==0 일때 i+1을 출력해주면 원하는 값이 나올것이다.
이 방법을 이용해서 next_permutation을 이용해서 조합을 쉽게 구할 수 있다.
이해는 되는 방법이지만 당장에는 바로 떠올리기 쉽지 않은 상태이다. 잘 외우도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
비내림차순과 오름차순에 관하여. 결론적으로 둘은 다르다. (0) | 2023.04.24 |
---|---|
c++. 삼항연산자를 활용한 간결한 표현법. (0) | 2023.04.24 |
c++ N-Queen 문제에서 영어로 row와 column이 헷갈려서 기억하려고 작성. (0) | 2023.04.24 |
c++ 전역변수로 선언된 char board[n][n];에 대하여. (0) | 2023.04.22 |
c++ 에서 string을 받는 함수에 대해서 (boj 17478) (0) | 2023.04.22 |
Comments, Trackbacks