C로 했습니다. 일단 배열에 담아서 소팅을 먼저 시도를 하구요
서로서로 이동하기위해서 젤 빠른사람과 그다음번째로 빠른사람을 활용을 해야합니다.
2명만 있을경우 둘중 느린사람값,
3명만있을경우 가장느린사람 + 가장빠른사람이 복귀하는경우 + 두번째로 빠른사람
나머지경우에는 항상 4번의 이동이 있는데요 이때
2번째로 빠른사람 + 1번째빠른사람 + 가장느린사람 + 2번째 빠른사람.
2명을 이동했으니깐 n = n-2를 했습니다!
```{.cpp}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
void sort(int a[], int n)
{
int max_index = 0;
bool flag = true;
while (flag)
{
flag = 0;
for (int i = 0; i < n-1; i++)
{
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
flag = true;
}
}
n--;
}
}
int calculate(int a[], int n)
{
sort(a, n);
int sum = 0;
while (n > 1)
{
if (n == 2)
sum += a[1];
else if (n == 3)
sum += a[2] + a[0] + a[1];
else
sum += a[1] + a[0] + a[n-1] + a[1];
n -= 2;
}
return sum;
}
int main()
{
int n = 0;
scanf(" %d", &n);
int* a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
scanf(" %d", &a[i]);
printf("%d", calculate(a, n));
}
```
C로 했습니다. 일단 배열에 담아서 소팅을 먼저 시도를 하구요
서로서로 이동하기위해서 젤 빠른사람과 그다음번째로 빠른사람을 활용을 해야합니다.
2명만 있을경우 둘중 느린사람값,
3명만있을경우 가장느린사람 + 가장빠른사람이 복귀하는경우 + 두번째로 빠른사람
나머지경우에는 항상 4번의 이동이 있는데요 이때
2번째로 빠른사람 + 1번째빠른사람 + 가장느린사람 + 2번째 빠른사람.
2명을 이동했으니깐 n = n-2를 했습니다!
```{.cpp}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
void sort(int a[], int n)
{
int max_index = 0;
bool flag = true;
while (flag)
{
flag = 0;
for (int i = 0; i < n-1; i++)
{
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
flag = true;
}
}
n--;
}
}
int calculate(int a[], int n)
{
sort(a, n);
int sum = 0;
while (n > 1)
{
if (n == 2)
sum += a[1];
else if (n == 3)
sum += a[2] + a[0] + a[1];
else
sum += a[1] + a[0] + a[n-1] + a[1];
n -= 2;
}
return sum;
}
int main()
{
int n = 0;
scanf(" %d", &n);
int* a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
scanf(" %d", &a[i]);
printf("%d", calculate(a, n));
}
```