코딩테스트/LeetCode
[문자열 조작] 로그파일 재정렬
scone
2024. 5. 8. 10:49
🥕 [문자열 조작] 로그파일 재정렬
문제 링크
url : https://leetcode.com/problems/reorder-data-in-log-files/
🍒 문제 분석
로그 가장 앞부분은 식별자
문자로 구성된 로그가 숫자 로그보다 앞에 온다.
사전순으로 문자를 정렬한다.
문자가 동일한 경우, 식별자 순으로 정렬한다.
숫자 로그는 입력 순서대로 정렬한다.
🍓 내 해결 과정
숫자열과 문자열을 쪼갠 뒤, 문자열을 정렬한 뒤 합침
🥑 틀린 답안
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
let, dig = [], []
for ls in logs:
if ls.split()[1].isdigit():
dig.append(ls)
else:
tmp = ls.split()[1:] + [ls.split()[0]]
let.append(tmp)
let.sort()
let = [' '.join([ls[-1]]+ls[:-1]) for ls in let]
return let + dig
Input
logs =
["dig1 8 1 5 1","let1 art zero can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output
["let1 art zero can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
Expected
["let3 art zero","let1 art zero can","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
"art zero can"
"art zero"
위 둘을 정렬하면 "art zero", "art zero can" 순으로 오는 것이 맞다.
위 답안에서는 "art zero let3", "art zero can let1" 을 정렬하다보니 나온 오답인듯 하다.
🥑 람다 + 연산
# https://leetcode.com/problems/reorder-data-in-log-files/
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
let, dig = [], []
for ls in logs:
if ls.split()[1].isdigit():
dig.append(ls)
else:
let.append(ls)
let.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return let + dig
🍉 깨달은 점 및 정리
길이가 동적으로 들어있는 배열도 람다를 사용해서 저렇게 정렬할 수 있다는 것을 배웠다.