문제 : 보물
옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.
길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + ... + A[N-1] × B[N-1]
S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.
S의 최솟값을 출력하는 프로그램을 작성하시오.
문제 풀이
문제를 보면 A[N]과 B[N]의 곱을 통하여 가장 작은 값을 만들면 되는 알고리즘이다.
문제에 힌트가 있다. 즉, A는 재배열이 가능하며, B는 재배열이 안된다. 각각 배열의 최댓값과 최솟값의 곱을 더한 값이 문제에서 원하는 답인 최솟값이다.
N = int(input())
Alist = list(map(int, input().split()))
Blist = list(map(int, input().split()))
temp = 0
for _ in range(len(Alist)):
temp += min(Alist)*max(Blist)
Alist.remove(min(Alist))
Blist.remove(max(Blist))
print(temp)
위 코드를 보면, 주어진 각각의 값을 리스트에 넣고, 그 값의 최솟값과 최댓값을 곱하여 temp에 더하게 된다.
그 뒤 사용한 값(min/max)은 다음 계산을 위해 제거(remove)를 한다.
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[파이썬] 백준 알고리즘 11047 : 동전 0, python (1) | 2022.10.28 |
---|---|
[파이썬] 백준 알고리즘 3052 : 나머지 (Python) (1) | 2022.10.18 |
[파이썬] 백준 11399 : ATM (python) (1) | 2022.10.08 |
[파이썬] 백준 11726 : 2xn 타일링 (python) (0) | 2022.10.06 |
[파이썬] 백준 1003 : 피보나치 함수 (1) | 2022.10.04 |
댓글