알고리즘

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

hminor 2023. 8. 29. 09:56

 

풀이

  • 단순히 해결하기 위해선 a는 오름차순, b는 내림차순 정렬 후
  • 첫 번째 코드와 같이 a와b의 인덱스 값을 곱한 값을 누적합 하면 되는 단순한 문제지만.
  • 문제의 의도는 a만 정렬하고 b는 정렬하지 않는 것을 중점으로 두고 있기에
  • 두 번째 코드와 같이 해결
    • b에 있는 가장 큰 값을 제거 하는 방식을 적용
    • cnt는 a는 오름차순 정렬을 했기에 순서대로 적용하기 위함.

 

# 일반적으로 푸는 방식
import sys
input = sys.stdin.readline
n = int(input())
a = sorted(map(int,input().rstrip('\n').split()))
b = sorted(map(int,input().rstrip('\n').split()),reverse=True)
print(sum([a[i]*b[i] for i in range(n)]))

 

# b를 정렬하지 않고 푸는 방식
import sys
input = sys.stdin.readline
n = int(input())
a = sorted(map(int,input().rstrip('\n').split()))
b = list(map(int,input().rstrip('\n').split()))
result, cnt = 0, 0
while b:
    b_mx = max(b)
    result += a[cnt]*b_mx
    del b[b.index(b_mx)]
    cnt += 1
print(result)