937. Reorder Log Files

Seong-Soo Jeong·2021년 4월 9일
post-thumbnail

문제

logs배열이 주어진다. 각 log는 공백으로 구분된 단어의 문자열이며, 첫 번째 단어는 식별자이다.

두가지 형식의 log들이 존재한다:

  • Letter-logs: 식별자를 제외한 모든 단어들이 소문자로 구성된 log.

  • Digit-logs: 식별자를 제외한 모든 단어들이 숫자로 구성된 log.

다음 기준에 맞추어 로그를 재정렬하시오.

  1. letter-logs는 모든 digit-logs보다 앞에 온다.
  2. letter-logs사전 순서대로 정렬한다. 식별자를 제외한 모든 내용이 일치할 경우, 식별자의 사전 순서대로 정렬한다.
  3. digit-logs입력 순서를 유지한다.

logs의 정렬 결과를 반환하시오.

Example 1:

Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
Explanation:
The letter-log contents are all different, so their ordering is "art can", "art zero", "own kit dig".
The digit-logs have a relative order of "dig1 8 1 5 1", "dig2 3 6".

Example 2:

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"]


풀이

풀이의 골자는 다음과 같다.
 #1. letter-logsdigit-logs를 분리한다.
   =>여기서 digit-logs입력 순서를 유지하므로, 더이상 정렬할 필요가 없다.
 #2. letter-logs를 정렬한다.
   => 식별자를 제외한 부분을 1차 정렬 기준으로 세우고, 식별자를 2차 정렬 기준으로 세운다.
 #3. 정렬한 letter-logsdigit-logs를 이어 붙인 새로운 list를 반환한다.

이를 Python으로 구현하면 다음과 같다.

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters, digits = [], []
        
        #1.문자로만 이루어진 log와 숫자가 포함된 log를 분리
        for log in logs:
            if log.split()[1].isdigit():
                digits.append(log)
            else:
                letters.append(log)
                
        #2. 문자로만 이루어진 log list를 정렬.
        letters.sort(key= lambda x: (x.split()[1:], x.split()[0]))
        
        #3. 문자로만 이루어진 log list와 숫자가 포함된 log list를 합침.
        return letters + digits
profile
Man in the middle

0개의 댓글