PS/백준

[Python] 1026번 보물

s_omi 2024. 7. 14. 10:59

✏️ 문제

 

문제 파악

배열 A를 오름차순, 배열 B를 내림차순으로 배열한 후 각각 곱해주면 제일 쉽게 해결할 수 있으나 배열 B를 재배열하면 안된다는 조건을 넣으면 생각을 좀 해야한다.

 

배열 A에서 최소값, 배열 B에서 최대값은 max, min 함수를 통해 가져올 수 있다. 그 후 각각의 배열에서 지우면 최소값, 최대값이 갱신되어 계속해서 뽑아낼 수 있을 것이다. 이를 활용하자!

 

알고리즘

  • 수학
  • 그리디 알고리즘
  • 정렬

 

 

코드

 

  • 배열 B 재배열 가능
N = int(input())
s = 0

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

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

for i in range(N):
  s += A[i]*B[i]

print(s)
  • 배열 B 재배열 불가능
N = int(input())
s = 0

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

for i in range(N):
  s += min(A)*max(B)
  A.pop(A.index(min(A)))
  B.pop(B.index(max(B)))

print(s)

 

 

'PS > 백준' 카테고리의 다른 글

[Python] 1439번 뒤집기  (0) 2024.07.15
[Python] 13305번 주유소  (0) 2024.07.15
[Python] 1931번 회의실 배정  (0) 2024.07.14
[Python] 1541번 잃어버린 괄호  (0) 2024.07.14
[Python] 2217번 로프  (2) 2024.07.14