Python/백준 문제풀이

[백준 1026] 보물 파이썬 문제 풀이

코딩하는 친구 2023. 6. 28. 22:54

문제 풀이: S의 최솟값을 구하기 위해서 A배열의 가장 작은 요소와 B배열의 가장 큰 요소를 곱하고 그다음으로 작은 수와 큰 수를 반복해서 곱하고 더해주면 된다. 즉 A배열은 오름차순으로 정렬하고 B배열은 내림차순으로 정렬해서 각각 인덱스끼리 곱해서 더해주면 간단하게 풀 수 있다.

하지만!!

문제에서 B배열은 재배열하면 안 된다고 명시되어있기 때문에 다른 방법을 이용해서 풀어야 한다.

A배열은 재정렬이 가능하기 때문에 A를 오름차순으로 정렬하고 B의 가장 큰 값을 뽑아서 곱해준 더하는 방식으로 문제를 해결하면 된다.

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.remove(min(a_list))
    b_list.remove(max(b_list))

print(s)

리스트에서 del, remove, pop으로 값을 삭제할 수 있다. del과 pop은 삭제하고자 하는 값의 위치(인덱스)를 입력하여 삭제하고 remove는 삭제하고자 하는 데이터를 입력하여 삭제할 수 있다.

#pop을 사용하여 제거하는 경우
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)