CodingTest/정렬 알고리즘

두 배열의 원소 교체

seongduck 2022. 7. 8. 23:05

1. 문제 설명

출처 : 이코테2021

 


2. 문제 조건


3. 문제 해결 아이디어

  1. 매번 배열 A에서 가장 작은 원소를 골라서, 배열 B에서 가장 큰 원소와 교체
  2. A에 대하여 오름차순 정렬, B에 대하여 내림차순 정렬
  3. 각 배열의 첫 번째 인덱스부터 차례로 확인하면서 A원소가 B의 원소보다 작을 때만 교채
  4. 최악의 경우 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