※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10819번 문제인 차이를 최대로이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/10819 

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

N이 8 이하로 그 크기가 충분히 작다는 점을 관찰하자.

 

위의 관찰을 이용하면, 배열의 순서를 바꾸는 것은 많아야 8! = 40,320가지이므로 가능한 모든 나열방법을 전부 조사해 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using namespace std;

int N;
int arr[8];
bool visited[8];
vector<int> vec;
int ans = 0;

void func(int cnt) {
	if (cnt == N) {
		int tmp = 0;
		for (int i = 1; i < N; i++) tmp += abs(vec[i] - vec[i - 1]);
		ans = max(ans, tmp);
	}
	else {
		for (int i = 0; i < N; i++) {
			if (visited[i]) continue;
			visited[i] = 1;
			vec.emplace_back(arr[i]);
			func(cnt + 1);
			vec.pop_back();
			visited[i] = 0;
		}
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	for (int i = 0; i < N; i++) cin >> arr[i];

	func(0);

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 11524 // C++] Immortal Porpoises  (0) 2023.01.29
[BOJ 10994 // C++] 별 찍기 - 19  (0) 2023.01.28
[BOJ 27115 // C++] 통신소  (0) 2023.01.27
[BOJ 27113 // C++] 잠입  (0) 2023.01.26
[BOJ 27114 // C++] 조교의 맹연습  (0) 2023.01.26

+ Recent posts