[Algorithm][BOJ]1026번 - 보물(Python)

yurim·2020년 5월 22일
0
post-thumbnail

👇문제 링크👇
boj_1026


💡 문제요약

  • 배열 A/B에서 같은 인덱스의 값끼리 곱한 것들의 합이 최소가 되어야한다.
  • 배열 B는 재배열하지 않고, 배열 A만 재배열 할 수 있다.

💡 문제해결

  • A의 가장 큰 값과 B의 가장 작은 값을 곱해서 새로운 변수에 넣어 더해준다.
  • 사용한 값들은 list에서 제거해주어 그 다음 큰(작은)수를 뽑을 수 있도록 한다.

💻 Code

N = int(input())
A = list(map(int, input("A의 배열을 입력하세요").split()))
B = list(map(int, input("B의 배열을 입력하세요").split()))
S = 0

for i in range(N):
  S += min(A)*max(B)
  A.remove(min(A))
  B.remove(max(B))

print(S)

💡 후기

문제의 조건을 보면 B는 재배열하지 말라고 적혀져 있다.
근데 python의 내장함수인 min max를 썼으니 재배열 한건 아닌데.. 좀 찝찝하긴 하다.

이와 관련해서 다른 분들의 풀이를 참고한 결과, A를 오름차순 정렬하고, B를 내림차순 정렬하여 같은 인덱스의 값끼리 곱하였다.
재배열하지 말라고는 했지만 재배열 안된 B에 A를 끼워맞춰서 넣는거나 A는 오름차순(또는 내림차순) B는 내림차순(또는 오름차순) 으로 하는거나 덧셈의 교환법칙에 의하면 결국 같은 결과니까 막지 않는 것 같다고 하셨다.

앞으로 열심히 기록하는게 저의 목표입니당👍

profile
닭발먹고 힘내서 복습하자👻

0개의 댓글