알고리즘

5. 문자열 관리(특정한 기준으로 정렬하기)

jwjwvison 2021. 8. 16. 13:26

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

로그를 재정렬하라. 기준은 다음과 같다.

 1. 로그의 가장 앞 부분은 식별자이다.

 2. 문자로 구성된 로그가 수자 로그보다 앞에 온다.

 3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.

 4. 숫자 로그는 입력 순서대로 한다.

이 문제는 조건부로 정렬할때를 대비해서 연습해두면 좋을것 같은 문제이다.

 

먼저 isdigit()을 이용해서 숫자 여부인지를 판별해 구분해본다.

그전에 split() 함수는 다음과 같은 작업을 수행해준다.

logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]

for log in logs:
    print(log.split())

그럼으로 다음 코드에서 split()[1] 은 리스트의 두번째 인자를 가지고 비교하는 것이다.

def reorderLogFiles(logs):
    letters,digits=[],[]
    for log in logs:
        if log.split()[1].isdigit():
            digits.append(log)
        else:
            letters.append(log)

    # 정렬기준: 문자열[1:]을 키로 하여 정렬하며, 동일한 경우 후순위로 문자열[0]을 지정
    letters.sort(key=lambda x: (x.split()[1:],x.split()[0]))

    return letters+digits

여기서 제일 앞 문자를 제외한(이 문제에서는 식별자라고 한다) 문자열[1:]을 키로 하여 정렬하며, 동일한 경우 후순위로 식별자 [0]을 지정해 정렬되도록 람다 표현식을 이용해 정렬했다.