본문 바로가기
코딩테스트 준비/프로그래머스

[프로그래머스][C++] 최솟값 만들기

by 스테디코디스트 2023. 10. 31.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> A, vector<int> B)
{
    int answer = 0;
    
    sort(A.begin(), A.end());
    sort(B.rbegin(), B.rend());
    
    for(int i = 0; i < A.size(); i++)
    {
        answer += A[i] * B[i];
    }

    return answer;
}

<풀이과정>

1. 두 배열의 원소들을 각각 곱해서 더한 값이 최소가 나오려면, 한 쪽의 가장 작은 값과 다른 한 쪽의 가장 큰 값을 곱하고, 그 다음 작은 값과, 다른 한 쪽의 그 다음 큰 값을 곱하고 이렇게 한 쪽은 작은 값부터 오름차순으로 다른 한 쪽은 큰 값부터 내림차순으로 쌍을 지어 곱해주어야 한다.

2. 따라서 sort를 이용해 A는 작은 수부터 오름차순으로 정렬하고, B는 큰 수부터 내림차순으로 정렬한다.

3. A,B는 길이가 같으므로 반복을 같이 진행하며 각각의 원소를 곱해서 answer에 더해준다.

4. 반복이 끝난 뒤 answer를 리턴한다.


<코멘트>

이게 통과야? 했는데 통과 되었다.ㅋㅋㅋ

 

sort를 이용해서 2단계치곤 엄청 빨리, 간단하게 풀어낸 것 같다.👍


<제출결과>