문제 링크 : 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
이 문제는 주어진 logs 라는 배열을 주어진 조건에 맞게 정렬하는 문제이다.
주어진 조건은 다음과 같다.
1. 각 단어 뒤의 식별자는 소문자로만 구성된다. 또는,
2. 각 단어 뒤의 식별자는 숫자로만 구성된다.
정렬해야 하는 순서는
1. 식별자 뒤에 문자열이 오면(letter-logs) 사전순으로 정렬하고, 사전순이 같으면 식별자 숫자로 정렬한다.
2. 식별자 뒤에 숫자가 오면(digit-logs) Input되어있는 순서로 정렬되어야 한다.
3. 그 후, letter-logs 뒤에 digit-logs를 이어준다.
풀이방법
처음에는 위 조건대로 우선 letter-logs랑 digit-logs를 분리한 후, letter-logs를 lambda식을 이용하여 정렬하고, join으로 다시 하나의 문자열로 만들어 준 후에 letter-logs와 digit-logs를 합쳐주었다.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
split_list = []
log_list = []
dig_list = []
ret = []
for str in logs:
s = str.split()
if s[1].isdecimal():
dig_list.append(s)
else:
log_list.append(s)
sorted_log = sorted(log_list, key=lambda x: (x[1:], x[0]))
for s in sorted_log:
ret.append(" ".join(s))
for s in dig_list:
ret.append(" ".join(s))
return ret
다른 풀이방법을 찾아보니 확실히 파이썬 답게 풀었구나 싶었다. split에 maxsplit parameter로 split할 수 있는 범위를 제한할 수 있는 것도 처음 알았고, return에서 조건문을 이렇게도 사용할 수 있구나 싶었다.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
def get_key(log):
_id, rest = log.split(" ", maxsplit=1)
return (0, rest, _id) if rest[0].isalpha() else (1, )
return sorted(logs, key=get_key)
'Algorithm > Leetcode' 카테고리의 다른 글
[LeetCode] 771. Jewels and Stones (0) | 2021.02.14 |
---|---|
[LeetCode] 23. Merge k Sorted Lists (0) | 2021.02.14 |
[LeetCode] 344. Reverse String (0) | 2021.01.27 |
[LeetCode] 125. Valid Palindrome (0) | 2021.01.27 |
[LeetCode] 92. Reverse Linked List II (0) | 2021.01.24 |