archive

[leetCode] Reorder data in log files (Python) 본문

STUDY/알고리즘

[leetCode] Reorder data in log files (Python)

seonyounggg 2021. 2. 2. 21:02

✏️ 문제

 

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

✏️ 풀이

문제에서 제시된 대로 sort, sorted에 함수에 정렬 우선순위를 정해줘야하는 문제이다.

아직 sort함수와 lambda에 익숙하지 않고,

경우에 따라서 정렬기준이 달라져서 어려웠다

✏️ 코드

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        # 정렬 우선 순위
        # 1. let  
        # 1-1. contents
        # 1-2. identifiers
        # 2. digit        
        
        logs.sort(key = lambda x : (x[:3]=="dig", x[5:],x[:4]))
        return logs

일단은 위와 같이 다중 조건을 주었는데,,

1-2 조건까지는 충족을 하지만

2의 경우 원래의 순서를 유지해야 하는데 2도 함께 정렬되어 버리는 문제가 있다.

 

(추가) 문제를 다시 읽어보니 identifier도 그때그때 다르기 때문에 아래와 같이 슬라이싱으로 처리해줘야한다.

✏️ 다른 사람 풀이 (출처 : 파이썬 알고리즘 인터뷰)

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

전처리 과정에서 문자로그와 숫자로그를 각각 리스트에 저장한다. 

숫자로그는 정렬하지 않으므로 마지막에 덧붙인다.

문자로그 정렬은 contents, identifers 우선으로 정렬한다.

✏️ 생각

생각보다 숫자로그만 순서를 유지하는게 간단하네,,,, 😂

너무 깔끔하게만 풀려고 오히려 어렵게 생각하는 버릇을 버리자

Comments