※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |