코딩도장

코딩도장

변경이력

돌아가기
2 9개 문자 추가

2016年07月03日 09:40

양 상호

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)); } ```
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)); } ```
1 Original

2016年07月03日 09:40

양 상호

일단 배열에 담아서 소팅을 먼저 시도를 하구요 서로서로 이동하기위해서 젤 빠른사람과 그다음번째로 빠른사람을 활용을 해야합니다. 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)); } ```
일단 배열에 담아서 소팅을 먼저 시도를 하구요 서로서로 이동하기위해서 젤 빠른사람과 그다음번째로 빠른사람을 활용을 해야합니다. 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)); } ```
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /