Programming/leetcode

937. Reorder Data in Log Files

홍열 2021. 1. 21. 10:18
728x90
  • 주어진 데이터에서 문자데이터와 숫자데이터를 구분하는 문제
  • 맨앞에 문자 데이터/숫자 데이터에 따라서 구분자가 주어짐(let, dig)
  • 문자 데이터는 구분자를 제외하고, 사전순으로 정렬하되, 같을 경우에는 구분자순서로 정렬
  • 숫자데이터는 들어온 순서대로 출력
  • 풀이
def reorderLogFiles(logs) -> [str]:
    let, dig = [], []

    for item in logs:
        #"dig1 8 1 5 1", "let1 art can"을 구분하는 방법
        # dig1과 let1로 구분해도 되지만, 어차피 숫자log는 뒤에 숫자만 나옴
        # 따라서 짤라봐서 배열 1번이 숫자면 숫자에 넣고, 그렇지 않으면 문자에 넣자

        if item.split(' ')[1].isalpha():
            let.append(item)
        else:
            dig.append(item)
    # 문제 조건에 letter는 구분자를 제외하고 사전순 정렬이고, 같을 경우에만 구분자 이용
    # 숫자 배열은 입력 그대로 출력

    # list sort시에 key값을 주고, 들어온 값을 split 구분자 이후의 값으로 정렬하고([1:])
    # 모두 같을 경우에는 구분자를 비교
    let.sort(key=lambda x:(x.split(' ')[1:],x.split(' ')[0]))

    return let+dig

print(f'{reorderLogFiles(["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"])}')