본문 바로가기

개발/Algorithm

[프로그래머스] 최솟값 만들기(python)

프로그래머스, 최솟값 만들기

 

TL;DR

  • 주어진 문제 조건을 구현(implementation)할 수 있는지

문제 분석

1. 길이가 같은 자연수로 이루어진 배열 A,B에서 두 수를 뽑아 곱해서 누적하여 더한다.
2. 이 때, 더한 결과가 최소가 되는 값을 반환한다.

 

- 1 ~ 2 : 해결해야 하는 문제 조건에 대해서 설명하고 있다.

입출력 형태

입출력 예시

 

- 입출력 예시를 확인해보면 문제 해결을 위한 접근방법이 떠오른다.

- 예시 1번은 1 * 5, 2 * 4, 4 * 4를 해서 더한 값이 최소가 된다.

- 예시 2번은 1 * 4, 2 * 3을 해서 더한 값이 최소가 된다.

- 즉, A에서 작은 원소와 B에서 큰 원소 순서대로 곱해서 더한 값이 최소값이 되는 것이다.

풀이

def solution(A,B):
    A.sort()
    B.sort(reverse=True)
    
    return sum([a * b for a, b in zip(A, B)])

 

- 이를 위해서 A를 오름차순으로 정렬하고, B를 내림차순으로 정렬한다.

- 길이가 같은 배열이므로 zip을 통해 두 배열의 원소를 동시에 접근할 수 있다.

- 각 배열의 원소를 곱한 리스트를 sum을 통해 더한 결과를 반환하면 된다.

반응형