세상을 바꾸는 데이터

[백준 1026번] 보물 - 파이썬 본문

PS Study/BOJ(백준)

[백준 1026번] 보물 - 파이썬

Industriousness 2022. 1. 20. 22:40

문제 링크:

https://www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net

 

<내 풀이>

  • B에 있는 수를 재배열하면 안 되므로 B의 인덱스 번호를 이용해 문제를 풀어보자.
  • A를 내림차순 정렬, B_index 변수를 만들어 오름차순으로 정렬한 인덱스 번호 값을 반환한다.  
    • 이는 S의 최솟값을 도출하기 위해서 실시한다. (A의 가장 큰 값과 B의 가장 작은 값이 곱해져야 한다.)

 

# 1026번 보물

# 1. a를 내림차순 정렬, b 오름차순을 인덱스 번호로 정렬
# 2. S의 최솟값 계산

# 입력값 받기
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

s = 0

# a 내림차순 정렬
a.sort(reverse=True)

# b 오름차순 정렬시 B의 인덱스 번호값을 반환
b_index = sorted(range(n), key = lambda x: b[x])

# S의 최솟값 계산
for i in range(n):
  mul = a[i] * b[b_index[i]]
  s += mul

print(s)

 

[백준 1026번] 보물 - 파이썬

 

728x90
반응형
Comments