2023.05.07 풀이
import sys
input=sys.stdin.readline
n=int(input())
a=list(map(int, input().split()))
b=list(map(int, input().split()))
sum=0
k=0
a.sort()
while k!=n:
for i in range(n):
if b[i]==max(b):
sum+=a[k]*b[i]
b[i]=-1
k+=1
break
print(sum)
- a 정렬 후 b의 max값과 a의 값들을 순서대로 곱해줌
b의 max 값 -> 브루트포스 처럼 for 문을 하나하나 돌면서 max 값 찾는다고 생각하였음 (문제에서 b는 재배열하면 안된다고 하였기때문)
2023.05.22 풀이
import sys
input=sys.stdin.readline
n=int(input())
a=list(map(int, input().split()))
b=list(map(int, input().split()))
sum=0
a.sort(reverse=True)
b1=sorted(b)
for i in range(n):
sum+=a[i]*b1[i]
print(sum)
- 배열 b를 변형하지 않고 정렬하기 -> sorted
import sys
input=sys.stdin.readline
n=int(input())
arr=list(map(int, input().split()))
arr2=list(map(int, input().split()))
arr.sort()
sum=0
for i in arr:
sum+=i*max(arr2)
arr2[arr2.index(max(arr2))]=0
print(sum)
다른 풀이
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
s = 0
for i in range(n):
am = a[i]
bm = b.pop(b.index(max(b)))
s += am * bm
print(s)
n = int(input())
a_list = list(map(int, input().split()))
b_list = list(map(int, input().split()))
s = 0
for i in range(n):
s += min(a_list) * max(b_list)
a_list.pop(a_list.index(min(a_list)))
b_list.pop(b_list.index(max(b_list)))
print(s)
- A배열의 최소값과 B배열의 최대값을 곱해서 s에 더해주고, pop함수로 A배열의 최소값과 B배열의 최대값을 배열에서 빼주는 걸 반복
check point
- 내 풀이는 2중 반복문이 되기 때문에
다른 풀이들 과 같이 최댓값과 최솟값을 추출해서 계산하는 방법 참고하기