본문 바로가기

알고리즘/파이썬 알고리즘 인터뷰

[LeetCode] 937. Reorder Data in Log Files (문자열 조작)

문제

https://leetcode.com/problems/reorder-data-in-log-files/

 

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

logs 배열을 입력으로 받는다.

각 로그는 단어의 집합으로 이루어지는데 각 단어들은 공백으로 구분된다. 그리고 첫 번째 단어는 '식별자'라고 부른다.

 

로그는 두 가지 종류로 나뉜다.

1. Letter-logs : 식별자를 제외한 모든 단어들은 영어 소문자로 구성된다.

2. Digit-logs : 식별자를 제외한 모든 단어들은 숫자로 구성된다.

 

로그를 다시 정렬시키자.

1. 모든 letter-logs는 모든 digit-logs 앞에 와야 한다.

2. letter-logs에서 로그의 내용(식별자를 제외한 나머지)을 기준으로 사전식 정렬을 한다. 내용이 동일할 경우, 식별자를 기준으로 사전식 정렬을 한다.

3. digit-logs는 상대 정렬을 한다. (입력받았을 때의 정렬 순서 그대로를 유지해야 한다.)

 

내 풀이

 

1. isalpha() 함수를 사용해서 letter-logs인지 digit-logs인지 알아내었다.

2. 두 가지 기준으로 정렬해야 했으므로 lambda를 사용하여 손쉽게 정렬하였다.

 

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letter_logs, digit_logs = [], []
        for log in logs:
            if log.split()[1].isalpha(): letter_logs.append(log)
            else: digit_logs.append(log)
        
        letter_logs.sort(key=lambda x: (x.split()[1:], x.split()[0]))

        return letter_logs + digit_logs

 

총평

책에 있는 풀이랑 거의 비슷해서 좀 놀랐다. 최대한 파이토닉하게 짜려고 노력했다.