본문 바로가기

알고리즘

[정렬] 백준 1026번 보물 Python 풀이

728x90
반응형

문제 요약

길이가 N인 정수 배열A와 B가 있다.

S = A[0]*B[0] + ... + A[N-1]*B[N-1]

S값이 최소가 되도록 A의 수만 재배열하고, 구한 S값을 출력한다.

입력

첫째 줄에 N이 입력

둘째 줄에 A에 있는 N개의 수가 순서대로 입력

셋째 줄에 B에 있는 수가 순서대로 입력

N은 50보다 작거나 같은 자연수

A, B 각 원소는 100보다 작거나 같은 음이 아닌 정수

출력

첫째 줄에 S의 최솟값 출력

입출력 예시

입력 출력
5
1 1 1 6 0
2 7 8 3 1
18

작성코드

15분정도 소요

N = int(input())
A = B = []
result = 0
A = [int(x) for x in input().split()]
B = [int(x) for x in input().split()]

A.sort()
B.sort(reverse=True)
for i in range(N):
    result += A[i] * B[i]
print(result)

피드백

내가 찾은 패턴

  • A와 B를 오름차순, 내림차순으로 정렬하여 계산
    어차피 원하는 결과를 출력하면 되는 것이기 때문에 A, B 모두 정렬해서 값을 구함

깨달은 것

  • 매번 list에 int로 입력받는 것이 어렵다. 2차원 list 초기화 방법과도 비슷한 것 같다. 둘 다 잘 기억해두기.
728x90
반응형