본문 바로가기
나동빈 with 파이썬/실전문제 풀이

[Ch.6 - 정렬] 두 배열의 원소 교체

by yewonnie 2022. 2. 13.

My code

n, k = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))

a.sort()
b.sort()

tmp = n
for i in range(k):
    if a[i] < b[tmp-1]:
        a[i], b[tmp-1] = b[tmp-1], a[i]
        tmp -= 1
    else:
        break

print(sum(a))

Answer

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))

Code Review

이번 문제는 두 배열 a, b 가 주어졌을 때 배열 a의 모든 원소의 합이 최대가 되도록 배열 a 와 배열 b의 값을 최대 k 번 바꿔치기 하는 문제였습니다. 따라서 배열 a, b 를 오름차순으로 정렬해 준 뒤, k 번 동안 a의 첫번째 값과 b의 마지막 값을 비교했을 때 만약 a 의 값이 더 작다면 두 값을 바꿀 수 있도록 해주었습니다. 만약 그렇지 않다면 반복문을 빠져나오도록 해주었습니다. 바꿔치기 한 후 배열 a 의 모든 원소의 합을 sum 함수를 이용해 출력해주었습니다.
Answer code 는 My code 와 다르게 a의 작은 원소와, b의 큰 원소를 바꾸도록 하는 문제이므로 b 배열을 내림차순으로 정렬하여 같은 위치에 해당하는 원소들을 비교하여 바꿔치기하는 방식으로 해결했습니다. 

댓글