동빈이는 두 개의 배열 A와 B를 가지고 있습니다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수입니다.
동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말합니다.
동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야 합니다.
N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하세요.
예를 들어 N = 5, K = 3이고, 배열 A와 B가 다음과 같다고 해봅시다.
이 경우, 다음과 같이 세 번의 연산을 수행할 수 있습니다.
세 번의 연산 이후 배열 A와 배열 B의 상태는 다음과 같이 구성될 것입니다.
이때 배열 A의 모든 원소의 합은 26이 되며, 이보다 더 합을 크게 만들 수는 없습니다.
풀이 시간 : 15분
시간 제한 : 2초
메모리 제한 : 128MB
입력 조건 :
- 첫 번째 줄에 N, K가 공백을 기준으로 구분되어 입력됩니다.
(1 <= N <= 100,000, 0 <= K <= N)- 두 번째 줄에 배열 A의 원소들이 공백을 기준으로 구분되어 입력됩니다. 모든 원소는 10,000,000보다 작은 자연수입니다.
- 세 번째 줄에 배열 B의 원소들이 공백을 기준으로 구분되어 입력됩니다. 모든 원소는 10,000,000보다 작은 자연수입니다.
출력 조건 : 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력합니다.
입력 예시 :
5 3
1 2 5 4 3
5 5 6 6 5
출력 예시 :
26
# N, K를 공백을 기준으로 입력 받음
n, k = map(int, input().split())
# 배열 A와 B의 원소를 각각 입력 받아서 리스트에 담음
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort() # 오름차순 정렬
b.sort(reverse=True) # 내림차순 정렬
# 최대 K번의 바꿔치기 연산 수행
for i in range(k):
# A의 원소가 B의 원소보다 작은 경우
if a[i] < b[i]:
# 두 원소를 교체
a[i], b[i] = b[i], a[i]
else: # A의 원소가 B의 원소보다 크거나 같을 때, 반복문을 탈출
break
# 배열 A의 모든 원소의 합 구하기
sum = 0
for i in range(len(a)):
sum += a[i]
print(sum) # 최댓값 출력
# 수정 전 코드
sum = 0
for i in range(len(a)):
sum += a[i]
print(sum)
# 수정 후 코드
print(sum(a))