프로그래머스 : 최솟값 만들기 (C++)
문제
코드
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 문제를 조금씩 풀고 있는데 상대적으로 금방 풀리는 것도 있고 좀 생각을 해야 하는 것도 있다. 코테 준비를 거의 두 달 가까이 했는데 아직 조금 문제가 길어지면 뇌가 꼬이는 느낌이… 든다. 좀 더 공부를 빡세게 해야 할 필요성을 느끼고 있는 중이다.
댓글남기기