* 해당 포스트는 <파이썬 알고리즘 인터뷰> 공부 후 정리 목적으로 작성되었습니다. *

 

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의 정의 참고

 

+ Recent posts