S가 최솟값을 갖게 하는 방법은 가장 작은 수와 가장 큰 수를 곱해서 각각 더하는 것이다.
예를 들어 A=[2, 4, 6], B=[5, 3, 2]인 경우 A와 B를 각각 오름차순이나 내림차순으로 정렬해서 S를 계산한다면 46이 나오게 된다. 반면, A를 오름차순, B를 내림차순으로 정렬해서 S를 계산한다면 34가 나오게 된다.
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort(reverse=True)
result = 0
for i in range(n):
result += a[i] * b[i]
print(result)
위의 소스코드는 정렬을 각각 오름차순과 내림차순으로 정렬하는 과정을 거친다.
아래의 소스코드는 배열을 재배열하지 않고, 그 당시 배열에 존재하는 최대값과 최소값을 곱해서 더해준 후 pop을 이용해서 배열에서 없애는 방식이다.
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
result = 0
for i in range(n):
result += min(a) * max(b)
a.pop(a.index(min(a)))
b.pop(b.index(max(b)))
print(result)