728x90
📢 '이것이 코딩 테스트다 with 파이썬' 책을 공부하고 복습하기 위해 작성했습니다.
문제
두 배열 A, B는 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다.
최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다.
N, K 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하라.
입력 조건
- 첫 번째 줄에 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 = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
A.sort()
B.sort(reverse=True)
for i in range(K):
if A[i] < B[i]:
A[i], B[i] = B[i], A[i],
else:
break
print(sum(A))
해설
A의 가장 작은 수와 B의 가장 큰 수를 교체한다.
단, 배열 A의 가장 작은 원소가 배열 B의 가장 큰 원소보다 작을 때에만 교체해야 한다.
A는 오름차순, B는 내림차순으로 정렬한 뒤에 최대 K번 첫 번째 인덱스부터 차례대로 비교한다.
두 배열의 원소가 최대 100,000개까지 입력될 수 있으므로 O(NlogN)을 보장하는 정렬 알고리즘을 이용해야 한다.
728x90
'Algorithm' 카테고리의 다른 글
[이코테] 06. 이진탐색 - 부품 찾기 (1) | 2024.01.07 |
---|---|
[이코테] 06. 이진탐색 (0) | 2024.01.07 |
[이코테] 05. 정렬 - 성적이 낮은 순서로 학생 출력하기 (1) | 2024.01.05 |
[이코테] 05. 정렬 - 위에서 아래로 (0) | 2024.01.05 |