728x90

최솟값 만들기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

주어진 배열 A, B를 이용하여 각 원소들의 곱의 합이 최소가 되도록 만드는 문제다.

두 배열을 정렬하여 한 배열에서는 가장 큰 값, 다른 배열에서는 가장 작은 값을 꺼내여 곱하고 누적해준다.

문제 풀이

소스코드 : C++

  1. A , B를 정렬한다.
  2. A 배열에서는 가장 작은 값을 B배열은 뒤에서부터 가장 큰 값을 꺼내어 answer에 누적하여 더해준다.
#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());
    int size = B.size();
    for(int i=0; i<A.size(); i++){
        answer += A[i]*B[size -1 -i];
    }
    return answer;
}

소스코드 : Python

로직은 C++과 같다 하지만 파이썬은 더욱 간단하다.

zip은 동일한 개수로 이루어진 자료형을 묶어주는 역할을 한다.

  • 2번줄 : 오름차순 정렬된 A와 내림차순 정렬된 B 의 각 원소를 a,b 라 할때 두 수를 곱하여 누적해서 더한다.
def solution(A,B):
    return sum(a*b for a, b in zip(sorted(A), sorted(B, reverse = True)))
728x90
300x250
WONILLISM