본문 바로가기

BOJ 길라잡이

[C/C++ 백준 1026번] 보물 (Silver 4)

www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거�

www.acmicpc.net

B에 있는 수는 재배열하지 말라고 했지만, 어차피 문제를 푸려면 정렬해야한다.

 

당연히 S의 최솟값을 구하려면 A의 가장 큰 수와 B의 가장 작은 수를 계속 곱해주면서 더해야한다.

A은 오름차순으로, B는 내림차순으로 정렬해준뒤 곱해주자. sort함수와 sort함수의 3번째 매개변수 comp를 잘 활용.

 

#include <cstdio>
#include <algorithm>
using namespace std;
bool comp(int a, int b){
	return a>b;
}
int main(void){
	int N, ans=0;
	scanf("%d", &N);
	int arr1[N], arr2[N];
	for(int i=0; i<N; i++){
		scanf(" %d", &arr1[i]);
	}
	for(int i=0; i<N; i++){
		scanf(" %d", &arr2[i]);
	}
	sort(arr1, arr1+N);
	sort(arr2, arr2+N, comp);
	for(int i=0; i<N; i++){
		ans += arr1[i]*arr2[i];
	}
	printf("%d", ans);
}