Diary, Data, IT

[LeetCode] 937. Reorder Data in Log Files - Python 본문

Coding Test/LeetCode

[LeetCode] 937. Reorder Data in Log Files - Python

라딘 2023. 4. 11. 17:46

[LeetCode] 937. Reorder Data in Log Files - Python

 

 

Reorder Data in Log Files - LeetCode

Can you solve this real interview question? Reorder Data in Log Files - You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier. There are two types of logs: * Letter-logs: All words (except the

leetcode.com

 

 

문제

각 로그에서 첫 번째 단어는 식별자이며, 공백으로 구분된 단어 문자열로 이루어진 로그 배열이 제공됩니다.

로그는 식별자를 제외한 모든 단어가 영문 소문자로 구성된 letter-logs와 식별자를 제외한 모든 단어가 숫자로 구성된 digit-log의 2종류로 구분됩니다.

이 로그 배열을 다음의 조건을 만족하는 순서대로 정렬하세요.

 

  • 문자 로그는 모든 숫자 로그 앞에 위치합니다.
  • 문자 로그는 사전순으로 정렬되며, 내용이 같으면 식별자를 기준으로 사전순으로 정렬합니다.
  • 숫자 로그는 입력됐을 때의 상대적인 순서를 유지합니다.

 

아이디어

1) 로그는 digit과 letter의 2가지 종류로 구분되며, letter이 앞에 오는 순서대로 배치해야하기 때문에 log의 식별자 다음이 isdigit인지 확인하여 digit과 letter의 2가지 리스트에 따로 담아준다.

2) letter 로그는 식별자 이후 내용을 사전순으로 정렬하되, 내용이 같을 경우 식별자 기준으로 정렬해야하므로 sort함수의 key로 식별자 이후 부분과 식별자 부분을 각각 넣어주면 된다.

 

 

코드

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

        #문자열/숫자열 로그 분류
        digit = [log for log in logs if log.split(' ')[1].isdigit()]
        letter = [log for log in logs if log.split(' ')[1].isdigit() == 0]

        #문자열 로그 정렬
        letter.sort(key = lambda x: (x.split()[1:], x.split()[0]))
        
        return letter + digit