문제설명
서로 다른 정수 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
댓글