PS/BaekJoon

[BaekJoon 1026번] 보물(C++)

박땅콩 2022. 8. 21.
728x90

※주의※

저의 풀이가 정답은 아닙니다.

다른 코드가 더 효율적이거나 좋을 수 있습니다.

언제나 다른 사람의 코드는 참고만 하시기 바랍니다.

 

 

[문제 풀이 사이트]

 

 

 

1026번: 보물

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

www.acmicpc.net

 

 

[문제 설명]

 

 

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.

 

 

[입력]

 

 

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

 

 

[출력]

 

 

첫째 줄에 S의 최솟값을 출력한다.

 

 

[입출력 예]

 

 

입력 출력
5
1 1 1 6 0
2 7 8 3 1
18
3
1 1 3
10 30 20
80
9
5 15 100 31 39 0 0 3 26
11 12 13 2 3 4 5 9 1
528

 

 

[문제 풀이]

 

 

S의 값이 가장 작게 만들기 위한 최적작은 값과 큰값을 곱하는 것이다.

그래서 A, B의 값을 입력 받고 vector에 저장한다.

A는 오름 차순 정렬, B는 내림 차순 정렬을 하였고, 서로 곱한 값을 더한 결과가 최소가 될 수 있었다.

 

 

[최종 코드]

 

 

[GitHub]

 

 

 

GitHub - SmallPeanutPark/BAEKJOON: Study BaekJoon for Coding Test

Study BaekJoon for Coding Test. Contribute to SmallPeanutPark/BAEKJOON development by creating an account on GitHub.

github.com

 

 

#include <bits/stdc++.h>
using namespace std;

vector<int> v1;
vector<int> v2;

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int N; cin >> N;
    for(int i = 0; i < N; ++i) {
        // A의 원소
        int n; cin >> n;
        v1.emplace_back(n);
    }
    for(int i = 0; i < N; ++i) {
        // B의 원소
        int n; cin >> n;
        v2.emplace_back(n);
    }
    sort(v1.begin(), v1.end()); // 오름 차순
    sort(v2.begin(), v2.end(), greater<int>()); // 내림차순
    int result = 0;
    for(int i = 0; i < N; ++i) {
        result += (v1[i] * v2[i]);
    }
    cout << result;
    return 0;
}
728x90

'PS > BaekJoon' 카테고리의 다른 글

[BaekJoon 11399번] ATM(C++)  (0) 2022.08.21
[BaekJoon 2217번] 로프(C++)  (0) 2022.08.21
[BaekJoon 11047번] 동전 0(C++)  (1) 2022.08.20
[BaekJoon 2631번] 줄 세우기(C++)  (0) 2022.08.19
[BaekJoon 2568번] 전깃줄 - 2(C++)  (0) 2022.08.19

댓글