컴공생 누르지 마세요! 컴공생 울어요.
[정렬] 정렬 (6) 실전문제 - 두 배열의 원소 교체 본문
이코테 p.182 실전문제 - 두 배열의 원소 교체
입력 예시
5 3 5 5 6 6 5 1 2 5 4 3 |
출력 예시
27 |
내 소스코드
- a는 오름차순 정렬, b는 내림차순 정렬 수행
- a의 i번째 원소가 b의 i번째 원소보다 작을 경우에만 교환
# 입력 받기
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
# a는 오름차순, b는 내림차순 정렬렬
a = sorted(a)
b = sorted(b, reverse = True)
for i in range(k):
if a[i] < b[i]: # a가 b보다 작을 때만 교환 수행
a[i], b[i] = b[i], a[i]
print(sum(a))
교재 소스코드
- 매번 배열 A에서 가장 작은 원소를 골라서, 배열 B에서 가장 큰 원소와 교체
- 단, 배열 A에서 가장 작은 원소가 배열 B에서 가장 큰 원소보다 작을 때에만 교체 수행
- 위 과정을 K번 반복
- 두 배열의 원소가 최대 100,000개까지 입력될 수 있으므로 O(NlogN)을 보장하는 정렬 알고리즘 이용
# 입력 받기
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
# a는 오름차순, b는 내림차순 정렬
a = sorted(a)
b = sorted(b, reverse = True)
# 첫 번째 인덱스부터 확인하며, 두 배열의 원소를 최대 K번 비교
for i in range(k):
if a[i] < b[i]: # a의 원소가 b의 원소보다 작은 경우
a[i], b[i] = b[i], a[i] # 두 원소 교체
else: # a의 원소가 b의 원소보다 크거나 같을 때, 반복문 탈출
break
print(sum(a)) # a의 모든 원소의 합 출력
'STUDY > 알고리즘' 카테고리의 다른 글
[이진탐색] 이진탐색 (2) 이진 탐색 (2) | 2023.03.15 |
---|---|
[이진탐색] 이진탐색 (1) 순차 탐색 (0) | 2023.03.15 |
[정렬] 정렬 (5) 실전문제 - 성적이 낮은 순서로 학생 출력하기 (0) | 2023.03.15 |
[정렬] 정렬 (4) 실전문제 - 위에서 아래로 (0) | 2023.03.14 |
[정렬] 정렬 (3) 파이썬의 정렬 라이브러리 (0) | 2023.03.14 |
Comments