* 해당 포스트는 <파이썬 알고리즘 인터뷰> 공부 후 정리 목적으로 작성되었습니다. *
leetcode 937번 ( https://leetcode.com/problems/reorder-data-in-log-files/ )
풀이방법 1.
파이썬에서 기본으로 제공하는 정렬함수 sort를 이용하고, key 파라미터를 이용해서 정렬 기준을 함수나 람다표현식(lambda expression)으로 제공한다.
sort() 함수는 리스트 자료형에만 사용할 수 있다. 만약 문자열을 sort() 함수로 정렬하고 싶다면 문자열을 리스트로 바꾼 뒤, 해당 리스트를 정렬하고, 다시 join() 등의 함수를 사용해서 리스트를 문자열로 바꾸는 작업이 필요하다.
또한 sort() 함수는 리스트 내부를 정렬한 뒤 값을 리턴하지 않는다.
반면 sorted() 함수는 리스트를 포함한 iterable(for loop를 사용해서 자신이 가진 원소들을 한 번씩 반환할 수 있는 자료구조)에 사용할 수 있다. 여기에는 set, dictionary 등도 포함된다.
또한 sorted() 함수는 주어진 iterable 내부를 정렬하지 않고, 새로 iterable을 만든 뒤 정렬해서 값을 리턴한다.
sort(key=None, reverse=False)
sort(), sorted() 함수는 key와 reverse 파라미터 값을 선택적으로 받을 수 있다.
reverse=True이면 값을 내림차순으로 정렬하고, reverse=False면 값을 오름차순으로 정렬한다. 기본값은 reverse=False이다.
key 파라미터의 값으로는 람다식이나 함수가 올 수 있다. 람다식도 결국은 함수의 일종이니, 함수만 올 수 있는 셈이다.
람다식은 이름 없는 익명 함수와 같으며, lambda 키워드를 사용해서 선언할 수 있다.
lambda 변수이름 : 함수 식
lambda x : x+10 # 1 variable
lambda [x, y] : x+y # multiple variables
로그 파일 정렬도 로그 파일 문자열을 단순 abc 정렬한 순서가 아니라, 두 번째 단어 이후의 문자 순서대로 정렬하고, 모든 문자열이 같을 경우만 첫 번째 단어를 고려하여 결정한다. 따라서 이 경우 sort() 함수에서 key 파라미터 값에다가 (두 번째 단어 이후의 문자열 + 첫 번째 단어의 문자열)을 리턴하는 함수를 할당하면, 해당 기준에 맞게 정렬할 수 있다.
letters.sort(key=lambda x:(x.split[1:], x.split[0]))
참고한 포스트
https://docs.python.org/3/howto/sorting.html
https://docs.python.org/3/reference/expressions.html
https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/Iterables.html -> iterable의 정의 참고
'알고리즘' 카테고리의 다른 글
ch6-6(leetcode 5). 가장 긴 팰린드롬 부분 문자열 (0) | 2023.01.10 |
---|---|
ch6-5(leetcode 49). 그룹 애너그램 (0) | 2023.01.09 |
ch6-4(leetcode 819). 가장 흔한 단어 (0) | 2023.01.09 |
ch6-2(leetcode 344). 문자열 뒤집기 (0) | 2023.01.09 |
ch6-1(leetcode 125). 유효한 팰린드롬 (0) | 2023.01.09 |