본문 바로가기
Python/알고리즘

[COS PRO 1급 #5-3] 배열의 사전순 정렬

by 포푸리 (POPOOLY) 2023. 3. 4.
반응형

문제설명

서로 다른 정수 n개가 담긴 리스트가 있습니다. 이 리스트를 앞 `(n+1)/2`개 원소는 증가하고 뒤 `(n+1)/2`개 원소는 감소하도록 정렬하려고 합니다. 이때, 조건을 만족하는 리스트가 여럿인 경우 사전순으로 가장 먼저 나오는 리스트를 답으로 합니다. 예를 들어, 주어진 리스트가 [7, 3, 4, 1, 2, 5, 6]라면 정렬한 이후에는 [1, 2, 3, 7, 6, 5, 4]가 됩니다.

정수 리스트가 numbers가 매개변수로 주어질 때, 문제의 조건에 맞게 정렬하여 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

정수 리스트가 numbers가 solution 함수의 매개변수로 주어집니다.
* numbers의 각 원소는 -1,000 이상 1,000 이하인 정수이며, 중복되는 수는 없습니다.
* numbers의 길이는 3 이상 10,000 이하인 홀수입니다.

return 값 설명

주어진 리스트를 앞 `(n+1)/2`개 원소는 증가하고 뒤 `(n+1)/2`개 원소는 감소하도록 정렬하여 return 합니다.
조건을 만족하는 리스트가 여럿인 경우 사전순으로 가장 먼저 나오는 리스트를 답으로 합니다.

예시

| numbers               | return                |
|-----------------------|-----------------------|
| [7, 3, 4, 1, 2, 5, 6] | [1, 2, 3, 7, 6, 5, 4] |

예시 설명

문제에 나온 예와 같습니다.

문제 코드

def solution(numbers):
    answer = []
    numbers.sort()
    mid = (len(numbers) - 1) // 2
    numbers[mid], numbers[len(numbers)-1] = numbers[len(numbers)-1], numbers[mid]
    left = mid + 1
    right = len(numbers) - 1
    while left <= right:
    	numbers[left], numbers[right] = numbers[right], numbers[left]
    	left = left + 1
    	right = right - 1
    answer = numbers
    return answer

풀이

def solution(numbers):
    answer = []
    
    # 앞 (n+1)/2개 원소는 증가하므로 오름차순 정렬
    numbers.sort()
    
    # 뒤 (n+1)/2개 원소는 감소하므로 원소 순서를 반대로 바꿈
    mid = (len(numbers) - 1) // 2
    numbers[mid], numbers[len(numbers)-1] = numbers[len(numbers)-1], numbers[mid]
    left = mid + 1
    right = len(numbers) - 2
    while left <= right:
    	numbers[left], numbers[right] = numbers[right], numbers[left]
    	left = left + 1
    	right = right - 1
    answer = numbers
    return answer

댓글