문제출처 : https://www.acmicpc.net/problem/1461
code
#include<iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int N, M, arr[51] = { 0, };
int i, neg_cnt = 0, result = 0;
cin >> N >> M;
for (i = 0; i < N; i++)
{
cin >> arr[i];
if (arr[i] < 0) neg_cnt++;
}
sort(arr, arr + N);
for (i = 0; i < neg_cnt; i += M)
result += abs(arr[i] * 2);
for (i = N - 1; i >= neg_cnt; i -= M)
result += abs(arr[i] * 2);
(abs(arr[0]) <= abs(arr[N - 1])) ? result -= abs(arr[N - 1]) : result -= abs(arr[0]);
cout << result;
return 0;
}
이 문제는 보자마자 정렬해야겠다고 생각이 들어야한다.
정렬을 해서 음수와 양수를 따로 생각해야한다.
절댓값으로 가장 멀리있는 곳은 왕복하지 않는데,
일단 음수방향, 양수 방향 모두 왕복을 한다음에 마지막에 빼주는게 깔끔하다..
어떻게 푸는지는 알았는데, 코드를 어떻게 짜느냐에따라 몇백줄이 넘어가기도하고 30줄정도에 끝낼수있는 문제인것같다.