문제
https://leetcode.com/problems/reorder-data-in-log-files/
logs 배열을 입력으로 받는다.
각 로그는 단어의 집합으로 이루어지는데 각 단어들은 공백으로 구분된다. 그리고 첫 번째 단어는 '식별자'라고 부른다.
로그는 두 가지 종류로 나뉜다.
1. Letter-logs : 식별자를 제외한 모든 단어들은 영어 소문자로 구성된다.
2. Digit-logs : 식별자를 제외한 모든 단어들은 숫자로 구성된다.
로그를 다시 정렬시키자.
1. 모든 letter-logs는 모든 digit-logs 앞에 와야 한다.
2. letter-logs에서 로그의 내용(식별자를 제외한 나머지)을 기준으로 사전식 정렬을 한다. 내용이 동일할 경우, 식별자를 기준으로 사전식 정렬을 한다.
3. digit-logs는 상대 정렬을 한다. (입력받았을 때의 정렬 순서 그대로를 유지해야 한다.)
내 풀이
1. isalpha() 함수를 사용해서 letter-logs인지 digit-logs인지 알아내었다.
2. 두 가지 기준으로 정렬해야 했으므로 lambda를 사용하여 손쉽게 정렬하였다.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
letter_logs, digit_logs = [], []
for log in logs:
if log.split()[1].isalpha(): letter_logs.append(log)
else: digit_logs.append(log)
letter_logs.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letter_logs + digit_logs
총평
책에 있는 풀이랑 거의 비슷해서 좀 놀랐다. 최대한 파이토닉하게 짜려고 노력했다.
'알고리즘 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
슬라이딩 윈도우 (0) | 2022.06.07 |
---|---|
[LeetCode] 49. Group Anagrams (문자열 조작) (0) | 2022.06.02 |
[LeetCode] 819. Most Common Word (문자열 조작) (0) | 2022.06.02 |
[LeetCode] 344. Reverse String (문자열 조작) (0) | 2022.05.31 |
[LeetCode] 125. Valid Palindrome (문자열 조작) (0) | 2022.05.30 |