위 글자를 클릭하면 해당 문제의 내용을 읽을 수 있다.
문제를 읽던 도중
"S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다."
이런 문구가 나와서 정렬을 어떻게 해야할지 고민을 했는데 예제 입출력을 보고 굳이 B에 있는 수를 재배열 하지 않아도 된다고 생각했다.
어쨌든 두 수의 곱을 통해 최소값만 만들면 되니 A의 수를 오름차순으로 정렬하고 B의 수를 내림차순으로 정렬해준다음 서로 곱해주면 값이 정확하게 나온다.
정답 코드는 아래와 같다.
import sys
input=sys.stdin.readline
T=int(input()) #테스트 케이스 개수
L1=list(map(int,input().split())) #A의 수를 담을 리스트
L2=list(map(int,input().split())) #B의 수를 담을 리시트
L1.sort() ; L2.sort() #A의 수와 B의 수를 오름차순으로 정렬
L1.reverse() #A의 수를 내림차순으로 정렬
sum=0 #최솟값을 저장할 변수
for i in range(T):
sum+=L1[i]*L2[i] #반복문으로 A와 B의 곱한값을 sum에 더해준다
print(sum)