※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1026번 문제인 보물이다.
문제는 아래 링크를 확인하자.
www.acmicpc.net/problem/1026

 

1026번: 보물

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

www.acmicpc.net

네 수의 a1<a2, b1<b2가 있을 때, a1*b2+a2*b1<a1*b1+a2*b2이 항상 성립하므로, 이 문제는 주어진 A와 B를 정렬한 뒤 역순으로 서로 곱한 합을 구하는 것으로 풀 수 있다.

 

문제에서 B의 순서를 건드리지 말라고 했으나, B의 순서를 건드려도 안 건드려도 출력해야하는 값은 같으므로 B의 순서를 바꿔도 상관이 없다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
using std::cin;
using std::cout;
using std::sort;

int main()
{
    int arrA[50], arrB[50]; //A와 B를 받아 정렬하기
    int n;
    cin >> n;
    for (int i = 0;i < n;i++) {
        int x;
        cin >> x;
        arrA[i] = x;
    }
    for (int i = 0;i < n;i++) {
        int x;
        cin >> x;
        arrB[i] = x;
    }
    sort(arrA, arrA + n);
    sort(arrB, arrB + n);
    int ans = 0;
    for (int i = 0;i < n;i++) { // 큰 수와 작은 수를 순서대로 곱해 더한다
        ans += arrA[i] * arrB[n-1-i]; 
    }
    cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 7453 // C++] 합이 0인 네 정수  (0) 2021.01.06
[BOJ 10815 // C++] 숫자 카드  (0) 2021.01.05
[BOJ 1977 // C++] 완전제곱수  (0) 2021.01.03
[BOJ 1475 // C++] 방 번호  (0) 2021.01.02
[BOJ 10988 // C++] 팰린드롬인지 확인하기  (0) 2021.01.01

+ Recent posts