“파이썬 알고리즘 인터뷰” + https://leetcode.com/problems/reorder-data-in-log-files/

이번 문제는 책만 읽고 예제를 봤을 때 전혀 이해가 가지 않았다. 나처럼 둔감한 사람한테 어울리지 않는 설명이었다고 생각한다. 그래서 리트코드의 원문을 봤더니 한 번에 이해가 됐다. 역시 모두가 이해하기 쉽게 글을 쓰는 것은 어려운 일인가보다.

주어진 리스트를 정렬해서 리턴하는 문제인데, 정렬 키를 리스트 요소 안에서 추출할 줄 알아야하는 문제이다. 책에서는 람다를 이용해서 단순화했지만 익숙하지 않아서 바로 이해되지는 않았다.

여기서 배울 수 있는 것은,
1. split()의 사용법
2. 리스트의 sort() 사용법
3. 람다의 사용법
4. 리스트 연산(두 리스트를 + 연산 하면 concat한 결과를 내줌)
인데 sort()와 람다는 반복해서 경험하지 않으면 역시 이해가 쉽지 않다.

Class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters, digits = [], []
        for log in logs:
            if log.split()[1].isdigit():
                digits.append(log)
            else:
                letters.append(log)

        letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
        return letters + digits

결론은 람다를 적절하게 쓸 수 있으면 코드가 간략해진다는 것이다.