1 minute read

사용언어

Visual studio 2019 C++

next_permutation 함수를 통해 순열 구하기

  • C++의 STL 사용 ( #include <algorithm> )

함수

함수에 벡터 or 배열 의 주소를 넣으면 된다.

  • next_permutation: 현재 나와있는 수열에서 인자로 넘어간 범위에 해당하는 다음 순열을 구하고 true를 반환한다. 다음 순열이 없다면 (다음에 나온 순열이 순서상 이전 순열보다 작다면 false를 반환

설명만 봐서는 이해가 안될 수 있으니 기초코드로 확인해보자!

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {

	vector<int> v(4); 
	for (int i = 0; i < 4; i++) {
		v[i] = i + 1; 
	} 
	// 1 2 3 4
	
	do {
		for (int i = 0; i < 4; i++) {
			cout << v[i] << " ";
		}
		cout << '\n';
	} while (next_permutation(v.begin(), v.end()));
	return 0;
}
1 2 3 4
1 2 4 3
1 3 2 4
    ...
4 3 1 2
4 3 2 1

이런식으로 출력된다. 문제에 사용해보면

[10819 풀이]

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int N;
	vector<int> v;

	cin >> N;
	for (int i = 0; i < N; i++) {
		int a; cin >> a;
		v.push_back(a);
	}
	int result = 0;
	sort(v.begin(), v.end());
	do {
		int t = 0;
		for (int i = 0; i < v.size() - 1; i++)
			t += abs(v[i] - v[i + 1]);

		result = max(result, t);
	} while (next_permutation(v.begin(), v.end()));

	cout << result << "\n";
}

next_permutation 함수를 사용해 문제를 손쉽게 해결할 수 있다

Categories:

Updated:

Comments