백준 1026 보물 파이썬
백준 1026번 한수 풀이
접근방식
- B배열은 건드리지 않은 상태에서 A배열만 정렬해서 접근해야 한다.
- 우선 A배열을 오름차순으로 정렬한다.
- 항상 A배열의 맨 앞의 수는 가장 작은 수가 오게 된다.
- 최솟값을 구하기 위해서는 A배열의 가장 작은수 * B배열의 가장 큰 수
혹은 A배열의 가장 큰 수 * B배열의 가장 작은 수를 곱해주면 된다.
후자의 경우에는 A배열을 내림차순으로 정렬하면 된다. - for문을 통해 A배열의 가장 작은수와 B배열의 가장 큰 수를 매칭시켜 계산해준 값을 ans 변수에 더해준다.
- 사용한 수를 각각의 리스트에서 제거해주면 다시 인덱스가 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
댓글남기기