[알고리즘] 백준 1026 : 보물 - S4

eternal moment·2023년 5월 7일
0

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

다른 풀이

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중 반복문이 되기 때문에
    다른 풀이들 과 같이 최댓값과 최솟값을 추출해서 계산하는 방법 참고하기

0개의 댓글