백준(BaekJoon)

[BaekJoon/C] No.1026 : 보물

ekdnjs510 2024. 10. 8. 10:46
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