알고리즘/백준

백준 1026 보물, 1049 기타줄 파이썬 python

fladi 2023. 2. 15. 21:16
728x90

 

[1026] 보물

import sys
input = sys.stdin.readline

input()
A = list(map(int, input().strip().split()))
B = list(map(int, input().strip().split()))

A.sort()
B.sort(reverse=True)

print(sum([a*b for a,b in zip(A,B)]))

 

  • (A의 가장 큰 값) * (B의 가장 작은 값)  +  (A의 두 번째로 큰 값) * (B의 두 번째로 작은 값) + ... 
    을 반복하면 곱의 최소를 구할 수 있다.
  • 최솟값만 출력하면 되니까 B를 내림차순으로 정렬해도 상관없다.

 

  1. A를 오름차순으로 정렬, B를 내림차순으로 정렬
  2. A와 B를 인덱스에 맞게 곱해준 리스트를 만들고, 그 리스트의 합을 구함.

 

 

[1049] 기타줄

import sys
input = sys.stdin.readline

N, M = map(int, input().strip().split())
packageP = []
singleP = []

for _ in range(M):
  a, b = map(int, input().strip().split())
  packageP.append(a)
  packageP.append(b * 6)
  singleP.append(b)

packageP.sort()
singleP.sort()

print(packageP[0]*(N//6) + min(singleP[0]*(N%6), packageP[0]))
728x90