문제

image

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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.begin(), B.end(), greater<int>());
    
    for(int i = 0; i < A.size(); i++){
        answer += A[i] * B[i];
    }

    return answer;
}

접근 및 풀이

원래 문제를 처음 봤을 땐 최근에 백트래킹 문제를 풀면서 하도 순열 조합을 많이 봤더니 순열 조합으로 풀어야 되는 문제인가 싶어서 어렵게 꼬아 생각하고 있었는데 생각보다 생각을 비틀면 간단한 문제였다. 나처럼 어렵게 생각하다 찾아보는 사람들이 있을 것 같아서 포스트를 쓴다.

배열 A를 오름차순으로 정렬하고, 배열 B를 내림차순으로 정렬한 다음 0번째부터 순서대로 곱한 다음 더한 것이 최솟값이 된다. 상대적으로 큰 값을 상대적으로 작은 값과 곱해야 상대적으로 작은 값이 나오기 때문이다.

레벨 2 문제를 조금씩 풀고 있는데 상대적으로 금방 풀리는 것도 있고 좀 생각을 해야 하는 것도 있다. 코테 준비를 거의 두 달 가까이 했는데 아직 조금 문제가 길어지면 뇌가 꼬이는 느낌이… 든다. 좀 더 공부를 빡세게 해야 할 필요성을 느끼고 있는 중이다.

댓글남기기