자료구조와 알고리즘/🥑알고리즘

[알고리즘][문자열 조작] - 3. 람다와 +연산자를 이용

얄루몬 2022. 2. 16. 21:09

 

📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님'을 보고 작성되었습니다.

😎문제 : https://leetcode.com/problems/reorder-data-in-log-files/submissions/


[람다와 +연산자를 이용]

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters, digits = [], []
        for i in logs:
            if i.split()[1].isdigit():
                digits.append(i)
            else:
                letters.append(i)
        letters.sort(key=lambda x:(x.split()[1:], x.split()[0]))
        return letters + digits
  • logs에 있는 요소들을 꺼내오면 전부 문자로 판단하기 때문에 단어 덩어리로 끊어서 판단을 해주어야 한다.
  • 띄어쓰기를 기준으로 숫자인지 문자인지를 판단해서 각 문자, 숫자 리스트에 넣어준다.
  • 문자만 있는 경우엔 람다를 이용해 정렬해줄 것이다.
  • letters.sort(key=lambda x:(x.split()[1:], x.split()[0])) 문자열의 경우 우선 순위에 따라서 정렬하기에 key에 x.split()[1:] 를 넣어주고 우선순위가 같을 경우엔 식별자를 후순위로 넣어 x.split()[0]를 넣어 정렬해준다.
  • 문자의 경우엔 입력 받은 그대로 출력해주기 위해 다른 정렬은 안 해준다.
  • 문자열 숫자 순으로 return 해준다.

 

 

 

[실행 속도 비교]

 

 

 

 

[컴프리헨션(List Comprehension]

람다 표현식 보다 훨씬 더 간결하고 가독성이 높은 것을 리스트 컴프리헨션이라고 한다.