728x90
https://www.acmicpc.net/problem/1026
문제해석
문제에서 B의 수가 순서대로 주어졌다고 하였으므로 오름차순으로 해줍니다. 이때 S(=A[0]B[0] + ... + A[N-1]B[N-1])의 최솟값을 구하려면 B는 오름차순으로 고정되어 있으므로 A가 내림차순이었을 때 최소값이 됩니다
소스코드 & 문제풀이
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n, i, j, temp, AB = 0;
int arrA[50];
int arrB[50];
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &arrA[i]);
for (i = 0; i < n; i++)
scanf("%d", &arrB[i]);
//배열A 내림차순 정렬
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - (1 + i); j++) {
if (arrA[j] < arrA[j + 1]) {
temp = arrA[j]; //작은수가 temp에 임시 저장합니다
arrA[j] = arrA[j + 1]; //비어있는 A의 앞 원소에 큰 수를 저장합니다(
arrA[j + 1] = temp; //작은수가 들어있는 temp를 A다음 원소값으로 저장합니다
}
}
}
//배열B 오름차순 정렬
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - (1 + i); j++) {
if (arrB[j] > arrB[j + 1]) {
temp = arrB[j]; //B의 앞원소(큰수)를 temp에 임시저장한뒤
arrB[j] = arrB[j + 1]; //비어있는 앞원소에 뒷원소(작은수)를 저장합니다
arrB[j + 1] = temp; //나머지 임시저장한 수를 뒷원소에 저장하면 오름차순이 됩니다
}
}
}
//배열 곱
for (i = 0; i < n; i++) {
AB += arrA[i] * arrB[i];
}
printf("%d", AB);
}
예제 입출력 결과
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.1018 : 체스판 다시 칠하기 (0) | 2024.11.07 |
---|---|
[BaekJoon/C] No.11660 : 구간 합 구하기 5 (1) | 2024.11.04 |
[BaekJoon/C] No.1021 : 회전하는 큐 (0) | 2024.10.08 |
[BaekJoon/C] No.1016 : 제곱 ㄴㄴ 수 (1) | 2024.09.27 |
[BaekJoon/C] No.1010 : 다리 놓기 (1) | 2024.09.27 |