Algorithm

[백준 1026] 보물

moguogu 2022. 6. 24. 21:50

문제설명

주어진 입력을 받은 뒤, 배열끼리의 최소합을 구해서 출력한다

이때 오로지 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