본문 바로가기

알고리즘/백준

백준 10819 차이를 최대로 - 브루트포스(순열 구하기) c++

728x90

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

 

10819번: 차이를 최대로

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

www.acmicpc.net

순열을 구하는 방법은 여러가지가 있다.

STL에서 벡터의 순열을 구하는 방법도있고,

아니면 길이가 N이 될때까지 모든 방법에 대해서 백트래킹을 진행하면서 dfs를 때리는 방식도 있다.

나는 후자를 선택해서 풀어보았다. 하지만 stl 사용 방식도 공부 해 볼것.

브루트포스의 범위는 꽤 넓구나.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
int N,answer;
int arr[9];
bool isselected[9];
vector<int> v;
 
void dfs(int cnt){
    if(cnt==N){
        int sum=0;
        for(int i=0; i<v.size()-1; i++){
            sum = sum + abs(v[i]-v[i+1]);
        }
        answer = max(answer,sum);
        return;
    }
    else{
        for(int i=0; i<N; i++){
            if(isselected[i]==true)
                continue;
            v.push_back(arr[i]);
            isselected[i]=true;
            dfs(cnt+1);
            isselected[i]=false;
            v.pop_back();
        }
    }
}
 
int main(void){
    cin>>N;
    for(int i=0; i<N; i++)
        cin>>arr[i];
    dfs(0);
    cout<<answer;
    
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs