본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 1026. 보물

by 뭉망뭉 2023. 5. 25.

백준 문제 링크: https://www.acmicpc.net/problem/1026

문제 요약

길이가 N인 정수 배열 A와 B

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

S의 값을 최소로 만들기 위해 A의 수를 재배열 (A만)

S의 최솟값을 출력

핵심 아이디어

A를 재배열해 B의 가장 큰 수와 A의 가장 작은 수가 곱해지게 하면 된다!

B는 재배열하면 안 된다고 문제에 써져 있는데, 재배열된 후의 A 배열을 문제에서 요구하고 있지 않으니 그냥 B 배열도 원하는 대로 섞어도 된다.

따라서 B는 큰 수부터 정렬, A는 작은 수부터 정렬하고, 곱한 값을 차례대로 더하면 된다.

풀이

# silver4-1026. 보물

import sys
input = sys.stdin.readline

n = int(input()) # 길이
a = list(map(int, input().split())) # A 배열
b = list(map(int, input().split())) # B 배열

# A를 재배열해 B의 가장 큰 수와 A의 가장 작은 수가 곱해지게 해야 함
# A 오름차순, B 내림차순 정렬하면 됨. 근데 B는 정렬하면 안 되는데 어떡하지..?
# 둘 다 정렬해서 계산해도 A는 원본 배열 바꾸고 B는 얕은 복사로 하면 되지 않을까
# 문제에서 재배열된 A배열을 요구하지 않으니까 신경 안 쓰고 저렇게 해도 될 듯

a.sort()
b.sort(reverse=True)

sum = 0
for i in range(n):
  sum += a[i] * b[i]
print(sum)

실행 시간

메모리 30864KB, 시간 72ms (python3)

'ALGORITHM > 백준' 카테고리의 다른 글

[BOJ/PYTHON] 1935. 후위 표기식2  (0) 2023.06.01
[BOJ/PYTHON] 9012. 괄호  (0) 2023.06.01
[BOJ/PYTHON] 15889. 호 안에 수류탄이야!!  (0) 2023.05.25
[BOJ/PYTHON] 9009. 피보나치  (0) 2023.05.25
[BOJ/PYTHON] 2437. 저울  (0) 2023.05.25

댓글