백준 10972, 10973, 10974
순열 문제는 기본적으로 C++ STL의 next_permutation()과 prev_permutation()을 이용하는데, 다음의 세 문제는 문제를 푼다기보단 next_permutation(), prev_permutation()을 이용해서 출력하는 문제와 같다.
next_permutation()의 사용법을 간단히 설명해보면,
먼저 int형 vector배열 a를 선언한다.
vector<int> a(n);
a에 초기 수열을 넣는다. 예시에선 1 2 3 4를 넣는다.
다음과 같은 표가 나온다.
a[0] | a[1] | a[2] | a[3] | |
---|---|---|---|---|
a[i] | 1 | 2 | 3 | 4 |
next_permutation을 실행한다.
next_permutation(a.begin(), a.end())
다음과 같은 표가 나온다.
a[0] | a[1] | a[2] | a[3] | |
---|---|---|---|---|
a[i] | 1 | 2 | 4 | 3 |
이런식으로 마지막에 4 3 2 1이 될 때까지 실행한다.
다음 수열이 없을 때엔 false를 반환한다.
prev_permutation은 그 반대로 생각하면 된다.
10972 소스
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
if (next_permutation(a.begin(), a.end())) {
for (int i = 0; i < n; i++) {
cout << a[i] << ' ';
}
}
else {
cout << "-1";
}
cout << '\n';
}
10973 소스
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
do{
for (int i = 0; i < n; i++) {
cout << a[i] << ' ';
}
cout << '\n';
} while (next_permutation(a.begin(), a.end()));
}
10974 소스
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
do{
for (int i = 0; i < n; i++) {
cout << a[i] << ' ';
}
cout << '\n';
} while (next_permutation(a.begin(), a.end()));
}
댓글남기기