본문 바로가기
Programming/알고리즘

[백준 / Python] 1026번 보물

by castberry_ 2023. 5. 12.
반응형

문제

https://www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net


소스코드

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

a.sort()
b.sort()
b.reverse()
s = [0] * (n + 2)
for i in range(n):
    s[i] = a[i] * b[i]
    
print(sum(s))

 

A[x1] * B[x1] + A[x2] * B[x2] + . . . + A[X] * B[X]

 

위 꼴의 식에서 가장 작게 A를 나열하려면 가장 큰 A 요소는 가장 작은 B요소랑 곱하고,

가장 작은 A 요소는 가장 큰 B 요소와 곱하는 형식으로 풀어야 가장 작은 결과가 나올 것이라 생각했다. 

 

B 요소들의 위치는 재배열하면 안된다고 나와있지만 더하기들은 어처피 위치를 서로 바꿔도 상관없으니까.. (덧셈 교환법칙)

 

A배열은 오름차순으로 정렬하고 B배열은 내림차순으로 정렬한 뒤 A,B 인덱스끼리 곱한 값을 s배열에 저장한 후 

sum() 함수를 이용해 출력하여 문제를 풀었다. 

 

반응형

댓글