[LeetCode] 937. Reorder Data in Log Files

원숭2·2022년 2월 5일
0

LeetCode

목록 보기
30/51

문제

풀이

문제의 조건은 주어진 logs를 정렬하는데, 숫자부와 문자부를 나누어서 정렬함. (각 부는 첫 식별자 이후의 내용에 따라 나뉨.)
1) 문자부가 반드시 숫자부 앞에 와야함.
2) 숫자부는 기존 순서를 유지해야함.
3) 문자부는 내용의 사전순으로 정렬하는데, 내용이 같을 경우 식별자의 사전순으로 정렬함.

  1. 숫자부와 문자부를 분리하기 위해 for문과 isdigit() 함수를 사용함.
  2. 문자부에서, 내용과 식별자를 분리하기 위해 split함수를 사용함.
    (maxsplit : split 횟수를 제한해줌.)
  3. 식별자와 내용이 분리되었으므로 문제의 조건에 맞게 lambda식을 이용해 sort함.
  4. sort된 문자부와 숫자부를 합쳐서 return함.

코드

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        digits = []
        letters = []
        for l in logs :
            if l[-1].isdigit() == True :
                digits.append(l)
            else :
                letters.append(l)
        
        letters = list(map(lambda x : x.split(maxsplit = 1), letters))
        
        letters.sort(key = lambda x : (x[1], x[0]))
        
        letters = list(map(lambda x : ' '.join(x), letters))
        
        return letters + digits

0개의 댓글