알고리즘/문제 풀이

백준 10819 - 차이를 최대로(C++)

qqlzzb 2022. 7. 13. 21:48

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

 

10819번: 차이를 최대로

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

www.acmicpc.net

 

풀이

입력으로 주어지는 배열의 원소 개수가 최대 8개이므로, 브루트포스로 하나하나 확인해가며 최댓값을 찾으면 된다.

이때 모든 경우의 수를 찾기 위해 next_permutation 을 사용했다.

입력받은 배열을 오름차순으로 정렬한 후, 계속해서 다음 순열을 찾으면서 원소들의 절댓값을 더한다.

끝날 때까지 반복하고 나면 max 변수에 최댓값이 저장된다.

 

코드

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

int absdiff(int a, int b)
{
    if(a>b) return a-b;
    else return b-a;
}

int main()
{
    int n;
    cin>>n;
    vector<int> v;
    int max=0;
    for(int i=0; i<n; i++)
    {
        int a;
        cin>>a;
        v.push_back(a);
    }
    sort(v.begin(),v.end());
    do{
        int sum=0;
        for(int i=0; i<n-1; i++)
        {
            sum+=absdiff(v[i],v[i+1]);
        }
        if(sum>max) max = sum;

    }while(next_permutation(v.begin(),v.end()));
    cout<<max;
    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 10825 - 국영수(C++)  (0) 2022.07.17
백준 1406 - 에디터(C++/DLL)  (0) 2022.07.16
백준 5430 - AC(C++)  (0) 2022.07.11
백준 4358 - 생태학(C++)  (0) 2022.07.03
백준 1197 - 최소 스패닝 트리(C++)  (0) 2022.06.29