플랫폼: 프로그래머스
강의명: 어서와! 자료구조와 알고리즘은 처음이지?
강사명: 이시윤
사람은 왜 정리
를 할까?
나중에 편하게 찾기 위함이다.
정렬 돼 있어야 쉽게 탐색할 수 있는 것이다.
찾는 스트레스를 줄여주고, 정리된 상태는 기분을 좋게 한다.
소프트웨어 세계도 그러하다.
디폴트는 오름차순 정렬이다.
(reverse=False)
>> L = [3, 6, 2, -1, 50, 13, 37, 8]
>> ordered_L = sorted(L)
>> ordered_L
[-1, 2, 3, 6, 8, 13, 37, 50]
>> L = [3, 6, 2, -1, 50, 13, 37, 8]
>> rev_ordered_L = sorted(L, reverse=True)
>> rev_ordered_L
[50, 37, 13, 8, 6, 3, 2, -1]
이번엔 리스트의 메소드를 활용해보자.
>>> L = [77, 55, 99, 22, 33, 66]
>>> L.sort()
>>> L
[22, 33, 55, 66, 77, 99]
# 이번엔 reverse=False 사용
>>> L = [77, 55, 99, 22, 33, 66]
>>> L.sort(reverse=False)
>>> L
[22, 33, 55, 66, 77, 99]
# reverse=True 사용
>>> L = [77, 55, 99, 22, 33, 66]
>>> L.sort(reverse=True)
>>> L
[99, 77, 66, 55, 33, 22]
위에서 수로만 구성된 요소들의 정렬을 봤다.
수는 대소비교가 직관적이라 sort 메소드의 결과가 예상 가능했다.
하지만, 문자열로만 구성된 리스트에선 어떨까? 🧐
>>> L = ['a', 'A']
>>> L.sort()
>>> L
['A', 'a']
ord()
내장 함수로 문자의 아스키값을 구할 수 있다.
자동차 기업들을 정렬시켜보자.
>>> car_brands = [
"Benz",
"KIA",
"HYUNDAI",
"Tesla",
"Ford",
"TOYOTA",
"BMW",
"NISSAN",
"Volvo",
"JAGUAR"
]
>>> car_brands.sort()
>>> car_brands
['BMW', 'Benz', 'Ford', 'HYUNDAI', 'JAGUAR', 'KIA', 'NISSAN', 'TOYOTA', 'Tesla', 'Volvo']
결과를 미리 상상해보자
L = ["Baking", "123", 55]
위 리스트는 정렬가능한가?
"Baking"의 "B"의 아스키코드로 자동 변환시켜 정렬시켜줄까?
안타깝게도 정렬할 수 없다
TypeError: '<' not supported between instances of 'int' and 'str'
>>> L = ["Baking", "123", 55]
>>> L.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
에러 항목에서도 볼 수 있듯이
자료형 str
, int
는 대소비교할 수 없다.
물론 불가능한 것은 아니다.
정렬 기준은 다음과 같다.
'55'
-> 55
55 -> 55
"Baking" -> ord("B") -> 66
순서도를 그려보면 아래와 같다.
>>> L
['Baking', '123', 55]
>>> res = sorted(L, key=lambda x: x if isinstance(x, int)
else (ord(x[0]) if x.isalpha() else int(x)))
>>> res
[55, 'Baking', '123']
>>> L = [
"BigO",
"Array",
"Hash Table",
"Stack",
"Queue",
"Tree",
"Graph",
"SORTING",
"BFS",
"DFS",
"Dynamic Programming",
"dijkstra",
]
>>> res = sorted(L, key=lambda x: len(x))
>>> res
['BFS', 'DFS', 'BigO', 'Tree', 'Array', 'Stack', 'Queue', 'Graph', 'SORTING', 'dijkstra', 'Hash Table', 'Dynamic Programming']
>>> L = [
{"name": "Coffee", "score": 87},
{"name": "Greek Yogurt", "score": 70},
{"name": "Meat", "score": 92},
]
>>> res = sorted(L, key=lambda x: x["score"])
>>> res
[
{'name': 'Greek Yogurt', 'score': 70},
{'name': 'Coffee', 'score': 87},
{'name': 'Meat', 'score': 92}
]