프로그래밍/[ Python ]

[문자열 조작] 로그 파일 재정렬

망나 2021. 1. 11. 08:39

* leetcode 937. Reorder Log Files

 

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

  1. 로그의 가장 앞 부분은 식별자다.
  2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
  3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
  4. 숫자 로그는 입력 순서대로 한다.
# 입력
logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"]

# 출력
["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"]

풀이 1. 람다와 + 연산자를 이용

def reorderLogFiles(self, logs: List[str]) -> List[str]:
    letters, digits = [], []
    
    # isdigit()을 활용하여 로그가 숫자 또는 문자인지 구분하여 따로 리스트에 저장하고,
    # 나중에 문자 로그 + 숫자 로그로 리턴한다.
    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

 

람다 표현식은 별도 함수를 선언하지 않고도 간단한 함수를 선언한 것 처럼 쉽게 처리할 수 있다.

# List Comprehension
def func(x):
    return x.split()[1], x.split()[0]
    
s.sort(key=func)


# Lambda
s.sort(key=lambda x: (x.split()[1], x.split()[0]))