문제설명
주어진 입력을 받은 뒤, 배열끼리의 최소합을 구해서 출력한다
이때 오로지 A배열의 값만 순서를 바꾼다
알고리즘
1. 입력될 수의 갯수와 각 배열을 입력 받는다
2. A배열은 오름차순, B배열은 내림차순으로 정렬한다
3. 각 인덱스에 맞게 곱하여 총 합을 출력한다
코드
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int A[51];
int B[51];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> A[i];
for (int i = 1; i <= n; i++)
cin >> B[i];
sort(A+1, A + n+1);
sort(B+1, B + n+1,greater<>());
int sum = 0;
for (int i = 1; i <=n; i++)
sum += B[i] * A[i];
cout << sum;
}
고찰
이번문제는 문제에서 A만 순서를 바꾸라고 했는데, 사실 정렬을 어떻게 하든 큰수 곱하기 작은 수를 하는게
최소값이 나온다는 사실엔 변함이 없으므로 단순히 정렬해서 곱하면 되는 문제였다
'Algorithm' 카테고리의 다른 글
[백준 1926] 그림 (0) | 2022.06.27 |
---|---|
[백준 18352] 특정 거리의 도시 찾기 (0) | 2022.06.25 |
[프로그래머스] 구명보트 (0) | 2022.06.24 |
[백준 9375] 패션왕 신해빈 (0) | 2022.06.22 |
[백준 2579] 계단 오르기 (0) | 2022.06.21 |