본문 바로가기
etc

LeetCode 937. Reorder Data in Log Files solution in python - 여러 개의 키로 리스트 정렬하기

by saltyzun 2021. 12. 7.

리트코드 937번 문제는 주어진 로그를 조건에 맞춰 분류 및 정렬하는 문제이다. 

https://leetcode.com/problems/reorder-data-in-log-files/

 

Reorder Data in Log Files - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


문제풀이

1. sorted()

파이썬에서는 sort() 혹은 sorted() 메서드를 이용해 리스트를 손쉽게 정렬할 수 있다. 둘의 차이라면 sort()는 정렬할 수 있는 대상이 list에 한정되며 기존 list의 인덱스가 영향을 받아 바뀐다는 것이고, sorted()는 list뿐만 아니라 iterable한 객체(String, Tuple, Dictionary, Generator)에 모두 적용이 가능하며 기존 list의 인덱스는 영향을 받지 않는다는 점이다. 

 

2. lambda 식을 이용해 여러 개의 키로 리스트 정렬하기 

기본적으로 sorted(list) 는 오름차순으로 정렬된 리스트를 반환한다. 그러나 이 문제에서는 정렬 조건이 조금 까다롭기에 lambda 식을 이용하는 것이 편리하다. 파이썬에서는 sorted() 메서드 내에 람다식을 이용해 여러 개의 정렬기준(key)을 설정해줄 수 있다. 

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letter_log = []
        digit_log = []
        for x in logs:
            if x.split(" ")[1].isalpha():
                letter_log.append(x)
            else:
                digit_log.append(x)
        
        letter_log = sorted(letter_log, key=lambda x: (x.split(" ")[1:], x.split(" ")[0]))
        
        return letter_log + digit_log

람다식은 이름 없는 함수이며, 함수 선언 없이도 함수 식을 간단히 표현해줄 수 있다는 장점이 있다. 반면, 복잡한 람다식을 사용하는 경우 코드의 가독성을 떨어트릴 수 있으므로 주의해야 한다. 위 풀이에서 사용한 람다식을 다시 함수로 풀면 다음과 같이 쓸 수 있다.

def get_key(x):
	return x.split(" ")[1:], x.split(" ")[0]

  

 

반응형

댓글