문제📖
풀이🙏
- 첫째 줄에 N이 주어진다.
- 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다.
- S = A[0]×B[0] + ... + A[N-1]×B[N-1]
- S의 값을 가장 작게 만들기 위해 A의 수를 재배열하라.
- 첫째 줄에 S의 최솟값을 출력하라.
-> A 리스트의 각 요소와 B 리스트의 각 요소의 인덱스 번호에 맞춰 곱한값의 합인 경우의 수 중에서 최솟값을 구하면되는 문제이다.
-> A를 오름차순 정렬, B를 내림차순 정렬한 다음에 zip함수
를 이용해 두 리스트를 묶어주었고 sum함수
를 이용해 리스트의 합을 구하였다.
-> 다 푼 뒤, 다른 분들의 풀이를 확인해보니 뒤늦게 B에 있는 수는 재배열하면 안 된다는 조건을 확인하였다.
-> 아래에 재배열하지 않고 푼 윤상ol님 블로그 글을 참고하겠다.
-> 앞으로는 문제를 좀 더 꼼꼼히 확인하는 습관을 가져야겠다. 😇
코드💻
import sys
def bomul(A, B):
return sum(a * b for a, b in zip(sorted(A), sorted(B, reverse = True)))
N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
B = list(map(int, sys.stdin.readline().split()))
print(bomul(A, B))
최적코드
결과😎
출처 && 깃허브📝
https://www.acmicpc.net/problem/1026
github