본문 바로가기

개발자 강화/코딩 테스트

[백준] 1026 보물 Greedy python lv4

배열 a,b가 존재하고

b의 순서는 바꾸지 않으면서, a의 순서만 바꿔서

i번째 a,b 원소의 곱의 총 합이 최소가 되도록 만드는 것

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

 

혹시 a와 b에 sort를 써도 정답 처리가 되나 궁금했는데

그냥

a.sort(reverse=Ture) b.sort()를 한 후 곱을 구해도 정답처리가 되긴 하더라

 

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

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

print(s)

 

 

근데 다른 사람들도 sort 써도 되는지 다 한번씩 해본게 좀 웃겼음

 

그 뒤로는 문제 지시사항처럼 풀어봤는데

 

a를 sort해서 오름차순으로 정리하고,

a의 원소를 순차적으로 탐색하며 b의 max값과 곱해서 최종 sum에 더해준 후,

사용된 b를 remove로 지우는 방식으로 했다

 

n = int(input())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
a.sort()
s=0
for i in range(n):
    b_ = max(b)
    s+=a[i]*b_
    b.remove(b_)
    

print(s)