백준 1026 보물 파이썬

최대 1 분 소요

백준 1026번 한수 풀이

접근방식

  1. B배열은 건드리지 않은 상태에서 A배열만 정렬해서 접근해야 한다.
  2. 우선 A배열을 오름차순으로 정렬한다.
  3. 항상 A배열의 맨 앞의 수는 가장 작은 수가 오게 된다.
  4. 최솟값을 구하기 위해서는 A배열의 가장 작은수 * B배열의 가장 큰 수 혹은 A배열의 가장 큰 수 * B배열의 가장 작은 수를 곱해주면 된다.
    후자의 경우에는 A배열을 내림차순으로 정렬하면 된다.
  5. for문을 통해 A배열의 가장 작은수와 B배열의 가장 큰 수를 매칭시켜 계산해준 값을 ans 변수에 더해준다.
  6. 사용한 수를 각각의 리스트에서 제거해주면 다시 인덱스가 0인 자리에는 동일한 원리가 적용된다.
# 입력받기
import sys

input = lambda: sys.stdin.readline().rstrip()

n = int(input())
# A배열 입력받기
a_li = list(map(int, input().split()))
# A배열 오름차순으로 정렬
a_li.sort()
# B배열 입력받기
b_li = list(map(int, input().split()))
# 최솟값 저장할 변수
ans = 0

# 각각의 배열이 n개의 수로 이루어졌기 때문에 for문도 n까지 수행
for i in range(n):
    # for문이 동작할때마다 B배열의 최댓값을 저장해준다.
    max_val = max(b_li)
    # 저장한 최댓값과 항상 A배열의 맨 앞의 수와 곱해주고 이를 ans에 더한다.
    ans += (a_li[0] * max_val)
    # 방금 연산에 사용한 수를 각각의 배열에서 제거해준다.
    a_li.remove(a_li[0])
    b_li.remove(max_val)

print(ans)

해당 문제는 실버4레벨에 해당하므로 어렵지 않게 풀 수 있는 문제였습니다.

알고리즘도 모든 것과 마찬가지로 꾸준한 연습과 이해를 바탕으로 실력이 향상합니다.

Just do it & Keep steady

댓글남기기