Reorder LogFiles

김_리트리버·2021년 3월 15일
0

[알고리즘]

목록 보기
24/47

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

문자로만 구성된 로그들이 앞에 와야함

let1 art can 다음 dig1 8 1 5 1

문자로만 구성된 로그끼리는 art can, own kit dig 을 가지고 비교해서 알파벳 순으로 정렬함

art can, art zero 처럼 맨처음 시작하는 문자가 같으면 let1, let3 을 비교해서 let1 → let3 이 되도록 정렬함

일차적으로 숫자 로그 , 문자로그를 분할함

타입을 검사하지 않고 실제 숫자인지 isdigit() 을 통해 확인함

sorted 를 통해 문자로만 구성된 로그 정렬

javascript 와 달리 어떤걸 기준으로 정렬할 건지를 argument 에 넣어주면 됨

sorted() 에 아무것도 안넣으면 오름차순으로 정렬함

list 에 딕셔너리가 있는 json 같은 경우 특정 key 를 기준으로 정렬할 수 있다.

아래 예시를 보면 일차적으로 id 를 기준으로 오름차순 정렬하지만 만약 id 가 같을 경우

2차 키로 name 을 기준으로 정렬한 결과를 리턴한다.


sample =[
{"id":1,"name":"a"},
{"id":2,"name":"f"},
{"id":2,"name":"c"},
{"id":2,"name":"b"}
]

print("before",sample)

sample.sort(key = lambda x:(x["id"],x["name"]))

print("after",sample)

python 에서는 두개의 list 를 합쳐서 하나의 list 를 만들 때 단순히 + 해주면 된다.

class Solution:
    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)
        
        
        
        return sorted(letters,key = lambda x:(x.split()[1:],x.split()[0]) )+digits
profile
web-developer

0개의 댓글