본문 바로가기
Computer Science/Problem Solving

[LeetCode > Medium > 937] Reorder Data in Log Files

by simply._. 2024. 6. 9.

목차

    문제

    • https://leetcode.com/problems/reorder-data-in-log-files/description/
    • Runtime: 42ms, Memory 16.56MB
    • 주어진 문자열 리스트를 아래 규칙에 따라 정렬한다.
      • 문자열은 띄어쓰기를 기준으로 분리가 가능, 분리된 첫 부분은 Key가 된다.
      • key를 제외하고는 모두 문자열인 경우가, 모두 숫자인 경우 앞에 온다.
      • 모두 문자열인 경우는 사전순으로 나열한다.
      • 숫자는 input으로 주어진 순서 그대로 나열한다. 

    내 풀이

    class Solution:
        def reorderLogFiles(self, logs: List[str]) -> List[str]:
            letter_logs, digit_logs = [], []
            for log in logs:
                # 로그를 띄어쓰기로 분리
                contents = log.split(" ")
                
                # 키를 제외한 값에서 로그를 판단 (마지막 값)
                # 숫자 로그와 문자 로그를 분리해 리스트에 저장
                if contents[-1].isdigit():
                    digit_logs.append(log)
                else:
                    letter_logs.append(log)
                    
            # 문자 로그 리스트를 정렬
            letter_logs.sort() #전체 기준
            letter_logs.sort(key=lambda x: ' '.join(x.split(" ")[1:])) #키 제외하고
            
            # 두 리스트를 병합
            letter_logs.extend(digit_logs)
            return letter_logs

    참고 사항

    # 아래와 같은 2번의 정렬을 더 간단하게 변경
    # 정렬 우선순위가 (1)첫 부분 제외 알파벳 순 정렬 (2)전체를 알파벳 순으로 정렬
    letter_logs.sort() #(2)
    letter_logs.sort(key=lambda x: ' '.join(x.split(" ")[1:])) #(1)
     
    # 튜플 형식을 반환해, 주어진 순서대로 정렬 기준으로 삼는다.
    letter_logs.sort(key=lambda x: (x.split(" ")[1:], x.split()[0]))​
    반응형