백준 1026번 보물

보물 문제 바로 가기


문제 설명

문제:
길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + A[1] × B[1] + ... + A[N-1] × B[N-1]

S의 값을 최소로 만들기 위해 A의 수를 재배열하자. 단, B는 재배열하면 안 된다.

입력:
- 첫째 줄에 N이 주어진다. - 둘째 줄에는 A에 있는 N개의 수가 주어진다. - 셋째 줄에는 B에 있는 N개의 수가 주어진다.
(단, N ≤ 50, 각 수는 0 이상 100 이하의 정수)

출력:
- S의 최솟값을 출력한다.

풀이 코드 (Python)


N = int(input())
num1 = list(map(int, input().split()))
num2 = list(map(int, input().split()))

num1.sort()
num2.sort(reverse=True)

total = 0
for i in range(N):
    total += num1[i] * num2[i]

print(total)

해결 전략

  • A 리스트는 오름차순으로, B 리스트는 내림차순으로 정렬
  • 각 인덱스별로 곱해서 누적합 계산