💻 입력 조건

  • 첫 번째 줄에 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

📖 문제 해결
파이썬 리스트의 내장함수 sort()를 이용하며 배열 a는 오름차순으로, 배열 b는 내림차순으로 우선 정렬하였습니다. 그 후 차례대로 k번째 원소까지만 확인하며 b의 원소가 더 큰 경우(a[i] < b[i])에 a의 원소를 b의 원소로 바꿔주는(a[i] = b[i])과정을 코드로 구현함으로써 문제를 해결하였습니다.

# n, k 입력받기
n, k = list(map(int, input().split()))

# 배열 a와 배열 b를 입력받기
a = list(map(int, input().split()))
b = list(map(int, input().split()))

# a는 오름차순으로, b는 내림차순으로 정렬
a.sort()
b.sort(reverse = True)

# 최대 k번 교체할 수 있으므로 k번째(인덱스로는 k-1) 원소까지만 확인
for i in range(k):
	
    # a[i]와 b[i]를 비교하였을 때, b[i]가 더 크다면 a[i]값을 b[i]값으로 바꾸기 
    if a[i] < b[i]:
        a[i] = b[i]
        
    # 만약 b[i]가 a[i]와 같거나 더 작은 순간이 생긴다면, 그 뒤에도 마찬가지일 것이므로 반복문 멈추기  
    else:
        break

# 배열 a의 모든 원소의 합을 출력
print(sum(a))
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글