새오의 개발 기록

Leetcode 937: 로그 파일 재정렬 본문

Algorithm/Leetcode

Leetcode 937: 로그 파일 재정렬

새오: 2022. 10. 1. 23:24

 

로그를 재정렬 하라.


조건

- 로그의 가장 앞 부분은 식별자이다.
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 로그의 내용을 기준으로 정렬하고 내용이 동일할 경우, 식별자를 기준으로 정렬한다.
- 숫자 로그는 입력받은 순서대로 한다.



 

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

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

// 출력 예제
["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"]

 

 

 

풀이

 

1. lambda 

입력 받은 로그를 split()을 이용하여 숫자인지 영어인지 확인하여 각각 리스트에 추가한다.

영어 로그인 경우 sort(key=lambda)를 이용하여 로그의 내용 기준으로 정렬하고 내용이 같으면 식별자를 기준으로 정렬한다.

영어 로그 리스트 + 숫자 로그 리스트의 순서로 두 문자열을 합친다.

def reorderLogFiles(self, logs):
    digits = []
    letters = []
    for log in logs:
        # split()은 빈칸을 다 잘라서 배열을 만들어 줌
        # 배열의 두 번째 값이 숫자인지 확인
        if log.split()[1].isdigit():
            digits.append(log)
        else:
            letters.append(log)
    # lambda 함수: 식별자가 없는 함수. 함수 선언 없이 라인 상에서 함수를 구현하고 싶을 때 사용
    # x를(log) split해서 [1:] 문자열, [0] 식별자 로 정렬함
    letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
    return letters + digits

 

 

 


 

 

 

 

+ lambda 함수 보충

 

한 마디로 함수를 딱 한 줄로 만들 수 있게 해주는 훌륭한 녀석

sort()함수를 사용할 때 자주 사용함

lambda를 가지고 변형 값 만든 후 이 값을 기준으로 정렬

 

lambda 매개변수 : 표현식

# 두 수를 더하는 함수
>>> def hap(x, y):
...   return x + y
...
>>> hap(10, 20)
30



# lambda로 표현하면
>>> (lambda x,y: x + y)(10, 20)
30


# sort()함수에서 lambda를 사용하면
>>> a[(1,2),(0,1),(5,1),(5,2),(3,0)]
>>> b=sorted(a)
>>> b
[(0,1),(1,2),(3,0),(5,1),(5,2)]
# 정렬 기준 key를 튜플의 첫번째 값으로 지정 
>>> c=sorted(a,key=lambda x:x[0])
>>> c
[0,1),(1,2),(3,0),(5,1),(5,2)]
# 정렬 기준 key를 튜플의 두번째 값으로 지정 
>>> d=sorted(a,key=lambda x:x[1])
>>> d
[(3,0),(0,1),(5,1),(1,2),(5,2)]

 

 

참고

https://pearlluck.tistory.com/462

'Algorithm > Leetcode' 카테고리의 다른 글

Leetcode 1: 두 수의 합  (0) 2022.10.03
Leetcode 49: 그룹 애너그램  (0) 2022.10.02
Leetcode 819: 가장 흔한 단어  (0) 2022.10.01
Leetcode 125: 유효한 팰린드롬  (0) 2022.09.30
Leetcode 344: 문자열 뒤집기  (1) 2022.09.30