문제 링크 : https://www.acmicpc.net/problem/1026
1026번: 보물
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거
www.acmicpc.net
문제 풀이
그리디 알고리즘을 활용한 문제이다.
여러 수들의 곱의 최솟값을 구하고 싶다면 최댓값에 최솟값을 곱해주면 되고, 곱의 최댓값을 구하고 싶다면 최댓값끼리 곱해주면 된다.
그렇기에 우선 오름차순으로 정렬을 진행하고, 한 배열에선 값이 작은 앞의 원소를, 다른 배열에서는 값이 큰 뒤의 원소를 차례대로 곱하면 최솟값을 구할 수 있다.
#include <iostream>
#include <algorithm>
using namespace std;
int A[55], B[55];
int n, mn;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 0; i < n; i++) cin >> A[i];
for(int i = 0; i < n; i++) cin >> B[i];
sort(A, A+n);
sort(B, B+n);
for(int i = 0; i < n; i++) mn += A[i] * B[n-i-1];
cout << mn;
}
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(C++) 백준 1929번 - 소수 구하기 (0) | 2023.05.15 |
---|---|
(C++) 백준 1978번 - 소수 찾기 (0) | 2023.05.14 |
(C++) 백준 2217번 - 로프 (0) | 2023.05.14 |
(C++) 백준 1931번 - 회의실 배정 (0) | 2023.05.14 |
(C++) 백준 11047번 - 동전 0 (0) | 2023.05.13 |