옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.
길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + ... + A[N-1] × B[N-1]
S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.
S의 최솟값을 출력하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.
첫째 줄에 S의 최솟값을 출력한다.
예제 입력 :
5
1 1 1 6 0
2 7 8 3 1
예제 출력 :
18
import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
S = 0
A_sort = sorted(A, reverse = True)
B_sort = sorted(B)
for i in range(N):
S += (A_sort[i] * B_sort[i])
print(S)
처음엔 B인덱스에 맞춰서 A를 바꾸려고 했는데 이렇게 하면
중복된 숫자가 나왔을 때 .index에서 같은 수만 뱉기 때문에 A중에 빈 인덱스가 생김
어차피 B를 정렬하든 안하든 S값은 같으므로 위처럼 해결하는게 낫다
[Python] 백준 - 1012번 - 유기농 배추 (0) | 2023.06.12 |
---|---|
[Python] 백준 2293번 - 동전 1 (0) | 2022.02.13 |
[Python] 백준 22869번 - 징검다리 건너기 (0) | 2022.02.13 |
[Python] 백준 1463번 - 1로 만들기 (0) | 2022.02.04 |
[Python] 백준 17626번 - Four Squares (0) | 2022.02.04 |
댓글 영역