1. 문제 설명
2. 문제 조건
3. 문제 해결 아이디어
- 매번 배열 A에서 가장 작은 원소를 골라서, 배열 B에서 가장 큰 원소와 교체
- A에 대하여 오름차순 정렬, B에 대하여 내림차순 정렬
- 각 배열의 첫 번째 인덱스부터 차례로 확인하면서 A원소가 B의 원소보다 작을 때만 교채
- 최악의 경우 O(NlogN)을 이용
4. 답안
N, K = map(int, input().split()) #N, K 동시에 입력
count = K
result = 0
A_array = list(map(int, input().split()))
B_array = list(map(int, input().split()))
A_array.sort()
B_array.sort(reverse = True)
for i in range(N):
for j in range(i,N):
if(A_array[i] < B_array[j]):
A_array[i] = B_array[j]
count -= 1
break
if(count == 0):
break
for i in range(N):
result += A_array[i]
print(result)
- N에는 입력받을 수의 갯수, K에는 변경할 숫자 수
- A는 오름차순, B는 내림차순으로 정렬
- 그리고 A,B모두 돌고 K만큼 바꿔줬으면 반복문을 탈출하도록 했다.
4-1. 표준 답안
N, K = map(int, input().split()) #N, K 동시에 입력
A_array = list(map(int, input().split()))
B_array = list(map(int, input().split()))
A_array.sort() #배열 A는 오름차순으로 정렬
B_array.sort(reverse = True) #배열 B는 내림차순 정렬
# 첫 번째 인덱스부터 확인하며, 두 배열의 원소를 최ㅐ K 번 비교
for i in range(K):
#A의 원소가 B의 원소보다 작은 경우
if A_array[i] < B_array[i]:
A_array[i], B_array[i] = B_array[i], A_array[i]
else:
break
print(sum(A_array))
- for문을 굳이 중첩하지 않아도 됐다..
'CodingTest > 정렬 알고리즘' 카테고리의 다른 글
프로그래머스 (Level 2) - 가장 큰 수 (0) | 2022.08.06 |
---|---|
프로그래머스 (Level 1) - k번째 수 (0) | 2022.08.06 |
정렬 알고리즘 종류와 특징 비교하기 (0) | 2022.07.08 |
계수 정렬 (0) | 2022.07.08 |
퀵 정렬 (0) | 2022.07.08 |