[파이썬/알고리즘] Leetcode - 937. Reorder Data in Log Files
728x90

[문제]

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 identifier) consist of lowercase English letters.
  • Digit-logs: All words (except the identifier) consist of digits.

Reorder these logs so that:

  1. The letter-logs come before all digit-logs.
  2. The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.
  3. The digit-logs maintain their relative ordering.

Return the final order of the logs.

 

로그를 기준에 맞춰 재정렬 하는 문제이다.

 

[예시]

Input: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]

Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]

 

[코드]

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters, digits = [], []
        
        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
        

 

우선 logs를 탐색하면서 log.split()[1] (예시: 9, 4, off, act) 이 숫자인지 판별한다.

숫자라면 digits 리스트에, 아니라면 letters 리스트에 담는다.

 

그후 람다를 이용하여 정렬한다.

identifier를 제외한 문자열을 키로 두어서 정렬을 하고, 동일한 경우에는 [0]을 기준으로 정렬되도록 하였다.

 

마지막으로 모두 이어 붙여서 반환한다.

 

 

이 문제에서 핵심은 identifier가 순서에 영향은 끼치지 않지만, 문자가 동일할 때에는 식별자 순서이다.

핵심을 람다를 이용하여 표현하였다. = letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))

 

 

 

문제 싫어요가 좋아요의 두배를 넘길래 왜 그런가 싶었는데.. 아마 문제 해석이 약간 까다로워서인가보다..

눈으로 문제를 슥 훑었을 때 이게 무슨 말인가..싶었다...

 

 

 

Reorder Data in Log Files - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

참고

 

파이썬 알고리즘 인터뷰 - 교보문고

95가지 알고리즘 문제 풀이로 완성하는 코딩 테스트 | [이 책의 구성][1부 코딩 인터뷰]1장, ‘코딩 인터뷰’에서는 코딩 테스트에 대한 소개와 어떻게 하면 시험을 잘 치를 수 있을지, 문제 풀이

www.kyobobook.co.kr

 

320x100