[이코테] 정렬_두 배열의 원소 교체 (python)

juyeon·2022년 7월 4일
0

문제

배열 A, B가 있을 때
각 배열의 원소를 한개씩 최대 k번 교환 가능.
배열 A의 원소의 합이 최대가 되어야 함.

나의 풀이

1. 맞긴 했는데.. 더 깔끔한 풀이는 없을까?🤔

-> 오류 발견! 수정해보자

n, k = map(int, input().split()) #n, k 입력
#두 줄의 배열을 list 형태로 입력 받음
num = [list(map(int, input().split())) for _ in range(2)]
#최대 k번 교환 가능할 때:
for i in range(k):
    num[0].append(max(num[1])) #배열 B의 가장 큰 수를 배열 A에 추가
    num[1].append(min(num[0])) #배열 A의 가장 작은 수를 배열 B에 추가
    num[0].remove(min(num[0])) #배열 A의 가장 작은 수를 제거
    num[1].remove(max(num[1])) #배열 B의 가장 큰 수를 제거
    
print(sum(num[0])) #배열 A의 원소의 합을 출력
  1. 오류 수정 & 더 짧게

n, k = map(int, input().split()) #n, k 입력
#두 줄의 배열을 list 형태로 입력 받음
num = [list(map(int, input().split())) for _ in range(2)]

list_a = num[0] #배열 A
list_b = num[1] #배열 B

#최대 k번 교환 가능할 때:
for i in range(k):
	#배열 A의 가장 작은 수가 배열 B의 가장 큰 수보다 작을 때
	if min(list_a) < max(list_b):
		#배열 A의 가장 작은 수와 배열 B의 가장 큰 수 교환
    	min(list_a), max(list_b) = max(list_b), min(list_a)
	else:
		break
    
print(sum(list_a)) #배열 A의 모든 원소의 합을 출력

: 배열 A의 가장 작은 수가 배열 B의 가장 큰 수보다 작지 않을 때를 대비해서 if문 삽입
: a, b = b, a 로 하면 간단하게 두 수의 자리를 바꿀 수 있는데..왜 이걸 깜빡 했을 까!

profile
내 인생의 주연

0개의 댓글