목차
반응형
문제
https://leetcode.com/problems/reorder-data-in-log-files/
주어진 로그는 문자로된 로그와 숫자로 된 로그로 이루어져 있다. 모든 로그의 첫 번째 단어는 식별자고 각 단어들 사이에는 공백이 있다.
문자 로그는 모두 소문자다. 주어진 예시 입력값을 보면 아래와 같다.
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
이 입력값을 아래의 기준에 맞게 정렬해야 한다.
- 모든 문자로그들이 숫자로그보다 앞에 와야 한다.
- 문자로그들은 사전식으로 정렬되어야 한다.
- 숫자로그들은 처음 주어진 순서를 유지한다.
이 기준에 맞게 정렬된 로그를 반환해야 한다.
풀이
#책풀이
람다 사용
from typing import 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)
# 두 개의 키를 람다 표현식으로 정렬
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letters + digits
우선 로그를 단어별로 확인하기 위해 split을 한다.
다음으로 숫자 로그와 문자 로그를 분리하기 위해 split의 1번 인덱스 값을 확인한다.
분리된 문자 로그를 정렬하는데 이때 key값을 람다식을 사용해서 지정한다.
풀이에서 사용된 람다식을 살펴보자. 람다식은 로그의 첫번째 단어와 식별자를 반환한다.
첫번째로는 로그 컨텐츠 내용을 기준으로 정렬, 두번째로는 식별자를 기준으로 정렬하라는 의미이다.
정렬된 문자로그와 숫자로그를 합해서 반환하면 된다.
참고한 책 : 파이썬 알고리즘 인터뷰
반응형
'Study > Algorithm' 카테고리의 다른 글
[LeetCode] #5. Longest Palindromic Substring (python) (0) | 2022.02.21 |
---|---|
[LeetCode] #49. Group Anagrams (python) (0) | 2022.02.20 |
[LeetCode] #819. Most Common Word (python) (0) | 2022.02.17 |
[LeetCode] #344. Reverse String (python) (0) | 2022.02.17 |
[LeetCode] #125. valid palindrome (python) (0) | 2022.02.17 |