[백준] 10819 C++

윤경·2021년 5월 5일
0

Baekjoon

목록 보기
37/64

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

// 차이를 최대로
// 순열을 어떻게 해야하나 찾다가 C++ STL next_permutation
// algorithm 헤더 필요. 배열의 시작과 끝을 인자로 받아 n개의 원소의 순열을 구할 수 있음.
// 오름차순으로 정렬된 값만 사용 가능 주의

int main() {
  ios::sync_with_stdio(0);

  // vector<int> v;

  int N, sum=0, result=0;
  cin >> N;
  vector<int> v(N);
  // 왜 벡터의 크기를 지정해줘야 하는지 모르겠음. 근데 지정 안하면 안됨.
  for(int i=0; i<N; i++) {
    cin >> v[i];
  }

  sort(v.begin(), v.end());
  // m: 가장 큰 원소, mm: 두번째로 큰 원소
  int m = v[0]; int mm = v[1];
  do {
    sum = 0;
    // 왠지 이렇게 하면 더 빨라질 것 같아서
    // 일단 가장 큰 원소 옆에 두번째로 큰 원소가 있으면 답이 될 수 없으므로 break
    for(int i=0; i<N-1; i++) {
      if(v[i]==m||v[i]==mm) {
        if(v[i+1]==m||v[i+1]==mm)
          break;
      }
      sum += abs(v[i]-v[i+1]);
    } result = max(result, sum);  // 최댓값 갱신
  } while(next_permutation(v.begin(), v.end()));  // 순열 생성

  cout << result << '\n';

  return 0;
}

중복을 허용하지 않는 순열 구하는 방법을 찾았더니 C++ STL에 next_permutation이라는 것을 알게 되었다.
next_permutation은 오름차순으로 정렬된 배열만 사용 가능하며 algorithm 헤더 파일이 필요하다.

profile
개발 바보 이사 중

0개의 댓글