[백준] 1026 (실버4)

zunzero·2022년 8월 10일
0

알고리즘(파이썬)

목록 보기
10/54

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)
profile
나만 읽을 수 있는 블로그

0개의 댓글