반응형
문제
https://www.acmicpc.net/problem/1026
소스코드
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() 함수를 이용해 출력하여 문제를 풀었다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준 / Python] 2941번 크로아티아 알파벳 (1) | 2023.07.02 |
---|---|
[백준 / Python] 11399번 ATM (1) | 2023.05.27 |
[백준 / Python] 1003번 피보나치 함수 (1) | 2023.05.05 |
[백준 / Python] 1297번 TV 크기 (1) | 2023.04.08 |
[백준 / Python] 1780번 종이의 개수 (0) | 2023.03.01 |
댓글