[LeetCode] 937 Reorder Log Files

kimwoody·2021년 9월 18일
0

문제

로그를 재정렬하라. 기준은 다음과 같다.

  1. 로그의 가장 앞 부분은 식별자다.
  2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
  3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
  4. 숫자 로그는 입력 순서대로 한다.

예제

  • 입력
logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
  • 출력
logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]

풀이 - 람다와 + 연산자를 이용

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters = []
        digits = []

        for log in logs:
            # log의 내용이 문자일 경우 letters 리스트에 append
            if log.split()[1].isalpha():
                letters.append(log)
            # log의 내용이 숫자일 경우 digits 리스트에 append
            else:
                digits.append(log)

        # 문자 로그를 정렬한다.
        # lambda를 이용해서 key를 정의하고 정렬한다.
        # 식별자는 순서에 영향을 끼치지않지만, 문자가 동일할 경우 식별자 순서로 정렬하므로
        # key는 첫 번째로 식별자 다음 요소부터 끝까지로 정렬하고
        # 두 번째 key값은 식별자가 된다.
        letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
        return letters + digits

이 문제를 풀면서 람다식을 거의 처음 사용해봤다. 내 방법으로 문제를 풀고 다른 사람들의 풀이를 볼 때, 코드 라인이 짧은 경우에 람다식이 사용된 경우가 꽤 있었던걸로 기억한다. 그땐 그냥 '람다식은 어려운건가보다' 라고 생각하고 항상 지나갔었는데 이 문제로 람다를 적용해보니 별거 아니였다... 그냥 함수를 짧게 표현하는것 정도? 이 표현이 맞는지는 모르겠다!ㅋㅋㅋ


아무튼 이번 기회에 람다에 대해서 알 수 있어서 좋았고, 람다에 대해서 조금 더 공부해보고 따로 포스팅을 해야겠다고 생각했다. 그럼 다음 포스팅은 파이썬 람다식으로...

풀이는 파이썬 알고리즘인터뷰 를 참고했습니다.

0개의 댓글