포스트

[Python] 프로그래머스 - 최솟값 만들기

두 배열 반대 방향 정렬 기반 곱의 합 최소화 원리, Python sort() 메서드 활용 효율성 개선

For the English version of this post, see here.
[Python] 프로그래머스 - 최솟값 만들기

Programmers 최솟값 만들기

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(A,B):

    A.sort()

    B.sort(reverse=True)

    answer = 0

    for i in range(len(A)):

        answer += A[i] * B[i]
 
    return answer
  • 처음에는

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
      def solution(A,B):
          answer = 0
    
          cnt = len(A)
          for i in range(len(A)-1):
              cnt -= 1
              for j in range(cnt):
                  if A[j] > A[j+1]:
                      A[j], A[j+1] = A[j+1], A[j]
    
          cnt = len(B)
          for i in range(len(B)-1):
              cnt -= 1
              for j in range(cnt):
                  if B[j] < B[j+1]:
                      B[j], B[j+1] = B[j+1], B[j]
    
          for i in range(len(A)):
              answer += A[i] * B[i]
    
          return answer
    

다음과 같이 작성했지만, 효율성 테스트에 통과하지 못함

  • 파이썬에서는 버블 정렬을 따로 사용하지 않고, sort() 함수를 통해 간단하게 정렬 가능함

sort()

  • 리스트(List) 객체의 내장 메서드

  • 원본 리스트를 오름차순으로 즉시 정렬(in-place)

  • list.sort(reverse=True)로 내림차순 정렬이 가능하며, 반환값은 None

  • 정렬된 복사본이 필요하면 내장 함수 sorted()를 사용합

    • list.sort() (리스트 원본 수정)특징: 원본 리스트 자체를 변경하며, 새로운 리스트를 반환하지 않음 (None 반환)

댓글

궁금한 점, 피드백, 오류 제보를 남겨 주세요.