# Problem
You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier. There are two types of logs:
Reorder these logs so that:
Return the final order of the logs.
Example 1:
Constraints:
|
# My answer
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
digit_logs=[]
letter_logs=[]
answer=[]
for log1 in logs:
log = log1.split(" ") #list로 만들기
#digit-logs / letter-logs 분리 - 문자, 숫자 섞인 로그 있을때
for i in range(1,len(log)):
if log[i].isdigit():
if i == (len(log)-1):
digit_logs.append(log1)
else:
break
# logs에서 숫자로그 제외
for dlogs in digit_logs:
logs.remove(dlogs)
# 문자로그 정렬
for log2 in logs:
log = log2.split(" ",1) # 식별자와 내용 나누기
letter_logs.append(log)
# 람다식 활용 정렬
letter_logs_sorted=sorted(letter_logs,key = lambda x : (x[1],x[0]))
for llog in letter_logs_sorted:
llog = llog[0]+" "+llog[1] # 로그 다시 이어주기
answer.append(llog) # answer 리스트에 정렬 순서대로 넣기
answer = answer+digit_logs
return answer
# Solution1
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
# 람다 표현식
: 식별자 없이 실행 가능한 함수
함수 선언 없이도 하나의 식으로 함수를 단순하게 표현 가능
** 코드가 길어질 수 있으니 주의
# 함수 선언하는 경우
def func(x):
return x.split()[1],x.split()[0]
s.sort(key=func)
# 람다식 사용
s.sort(key = lambda x : ( x.split()[1], x.split()[0] )
# 문자열이 숫자, 문자인지 확인하기
3개의 함수 모두 True/ False를 반환하는 Boolean 형
공백이 포함되어 있으면 False 반환
isdigit() : 문자열이 숫자로만 이루어져 있으면 True 반환
isalpha() : 문자열이 문자로만 이루어져 있으면 True 반환
isalnum() : 문자열이 문자 또는 숫자로 이루어져 있으면 True 반환
str_1 = "12"
str_2 = "1 2"
str_1.isdigit() # True
str_2.isdigit() # False
'Algorithm > LEET CODE ( 파이썬 알고리즘 인터뷰)' 카테고리의 다른 글
[LEET CODE] 5. Longest Palindromic Substring (0) | 2021.03.16 |
---|---|
[LEET CODE] 49. Group Anagrams (dict 자료형, sort(), sorted()) (0) | 2021.03.15 |
[LEET CODE] 819. Most Common Word ( 정규표현식 ) (0) | 2021.03.15 |
[LEET CODE] 344. Reverse String (0) | 2021.03.04 |
[LEET CODE]127. Valid Palindrome (0) | 2021.03.03 |