본문 바로가기
파이썬 알고리즘 코딩

로그파일 재정렬 문제

by 볼록티 2021. 3. 28.
728x90
반응형

6장의 문자열 조작 중 로그파일 재정렬이라는 실용적인 문제를 접해보도록 하자.

 

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

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

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

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

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

 

예시는 아래와 같다.

 

코드를 보고 바로 이해를 해보자.

먼저 각 로그들은 숫자로 구성되어 있거나 문자로 구성되어 있으니, 각 로그의 두번째 인덱스에 해당하는 부분이 숫자인지 문자인지를 파악해주는 isdigit() 을 사용한다.

그리고 문자로 구성된 로그와 숫자로 구성된 로그를 나누어 준 후, 문자로 구성된 로그들에 대한 정렬을 시작한다.

이 때 사용된 것이 sort 함수이고, 그 기준을 key 로 설정해준다. key=lambda x: (x.split()[1:] x.split()[0]) 이 의미하는 것은 x.split()[1:] 는 로그의 두번 째 인덱스부터 인 것을 먼저 기준으로 삼고, 2 순위로 x.split()[0] 인 식별자를 가지고 기준으로 삼아라는 의미이다.

    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letters, digits =[], []
        for log in logs:
            if log.split()[1].isdigit():
                digits.append(log)
            else:
                letters.append(log)
        letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
        return letters + digits

 

 

 

 

 

ref) 파이썬 알고리즘 코딩

728x90
반응형

댓글