Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- 큐
- 협업필터링
- 나는 리뷰어다
- 한빛미디어
- 추천시스템
- 프로그래머스
- DilatedNet
- Segmentation
- pytorch
- 알고리즘
- DFS
- Object Detection
- Image Segmentation
- eda
- 3줄 논문
- Semantic Segmentation
- 입문
- Recsys-KR
- 스택
- Machine Learning Advanced
- MySQL
- hackerrank
- 튜토리얼
- 파이썬
- TEAM EDA
- TEAM-EDA
- 나는리뷰어다
- 엘리스
- Python
Archives
- Today
- Total
TEAM EDA
[엘리스] 절댓값 순 정렬 본문
절댓값 순 정렬
문제 : n개의 숫자가 주어질 때, 이를 절댓값을 기준으로 오름차순 정렬하는 프로그램을 작성하세요. 만약 두 수의 절댓값이 같다면, 더 작은 숫자가 앞에 위치하게 됩니다. 이 실습 문제는 Quick sort로 구현해주세요.
입력 : 첫 번째 줄에 n개의 숫자가 주어집니다.
출력 : 절댓값을 기준으로 오름차순 정렬한 결과를 출력합니다.
입력 예시
-2 1 3 9 -5 6 7 -3
출력 예시
1 -2 -3 3 -5 6 7 9
풀이
- Quick Sort
- 절댓값 순 정렬
- 기저조건 : array가 1개 이하이면 자기자신 출력
- 임의로 pivot 출력 (중앙에 있는 값)
- pivot이 크면 왼쪽(left), pivot이 작으면 오른쪽(right), pivot이랑 같은데 음수이면 왼쪽 양수이면 오른쪽(equal)
- left에 대해서 QuickSort, right에 대해서 QuickSort 진행 (QuickSort(left) + equal + QuickSort(right))
import sys
sys.setrecursionlimit(100000)
def quickSort(array) :
# 1. 기저조건 : array가 1개 이하이면 자기자신 출력
if len(array) < 2 :
return array
# 2. 임의로 pivot 출력 (중앙에 있는 값)
pivot = array[len(array)//2]
# 3. left : pivot보다 작은 값, right : pivot보다 큰 값, equal : pivot하고 같은 값(절댓값 분리를 위함)
left = []
right = []
equal = []
for x in array :
# pivot이 크면 왼쪽
if abs(pivot) > abs(x) :
left.append(x)
# pivot이 작으면 오른쪽
elif abs(pivot) < abs(x) :
right.append(x)
# pivot이랑 같은데, 음수이면 왼쪽 양수이면 오른쪽
else :
if x < 0 :
equal = [x] + equal
else :
equal.append(x)
# 4. 재귀호출로 left, right 각각에 대해 QuickSort진행
return quickSort(left) + equal + quickSort(right)
def sortAbs(array):
'''
절댓값을 기준으로 오름차순 정렬한 결과를 반환하는 함수를 작성하세요.
'''
return quickSort(array)
def main():
line = [int(x) for x in input().split()]
print(*sortAbs(line))
if __name__ == "__main__":
main()
출처 : 엘리스 아카데미, https://academy.elice.io/learn
'EDA Study > 알고리즘' 카테고리의 다른 글
[엘리스] 회의실 준비 (Big) (0) | 2020.03.25 |
---|---|
[엘리스] 가장 가까운 두 점 찾기 (Big) (0) | 2020.03.25 |
[엘리스] Inversion counting (0) | 2020.03.25 |
[엘리스] 히스토그램 (0) | 2020.03.25 |
[엘리스] 색종이 만들기 (0) | 2020.03.25 |