https://www.acmicpc.net/problem/1026
문제
- 함수 S = A[0] * B[0] + ... + A[N-1] + B[N-1] 의 최소값을 구하는 코드
- 첫째 줄에 N (0 <= N <= 100) 입력
- 오름차순으로 정렬 후 곱해서 모두 더함
- 최솟값 출력
완성 코드
#include <stdio.h>
void quickSort(int array[], int low, int high) {
int L = low, H = high;
if (high < 1) return; //원소 개수가 1개면 바로 출력함
int pivot = array[(low + high) / 2]; //가운데 원소를 기준원소로 삼음
while (low <= high) {
while (array[low] < pivot) low++; //기준원소보다 low원소가 작을 때 low를 증가시킨다
while (array[high] > pivot) high--; //기준원소보다 high원소가 클 때 high를 감소시킨다
if (low <= high) {
int tmp = array[low]; //원소를 교환시킨다
array[low] = array[high];
array[high] = tmp;
low++;
high--;
}
} while (low <= high);
//재귀
if (L < high)
quickSort(array, L, high); //왼쪽 배열 재귀
if (low < H)
quickSort(array, low, H); //오른쪽 배열 재귀
}
int main(void) {
int N, sum = 0;
int A[50], B[50];
scanf_s("%d", &N);
for (int i = 0; i < N; i++) { // A 배열을 받는 부분
scanf_s("%d", &A[i]);
}
for (int i = 0; i < N; i++) { // B 배열은 받는 부분
scanf_s("%d", &B[i]);
}
quickSort(A, 0, N - 1); // 오름차순으로 정렬
quickSort(B, 0, N - 1);
for (int i = 0, j = N - 1; i < N, j >= 0; i++, j--) { // 큰 수와 작은 수를 순서대로(한 개는 오름차순, 한 개는 내림차순으로)
sum += A[i] * B[j];
}
printf("%d", sum);
return 0;
}
'백준 문제 풀이 > 백준 (C)' 카테고리의 다른 글
C 백준 1753 최단경로 (최단 경로) - 미완 (0) | 2024.07.01 |
---|---|
C 백준 1920 수 찾기 (이분탐색) (0) | 2024.06.30 |
C 백준 11718 그대로 출력하기 (문자열) (0) | 2024.06.30 |
C 백준 1316 그룹 단어 체커 (문자열) (0) | 2024.06.30 |
C 백준 11399 ATM (그리디) (0) | 2024.06.30 |