문제
로그를 재정렬하라. 기준은 다음과 같다
- 로그의 가장 앞 부분은 식별자다
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다
- 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다
- 숫자 로그는 입력 순서대로 한다.
풀이 1) 람다와 + 연산자를 이용
먼저, 문자로 구성된 로그가 숫자 로그보다 이전에 오며, 숫자 로그는 입력 순서대로 둔다. 그렇다면 문자와 숫자를 구분하고, 숫자는 나중에 그대로 이어 붙인다. 로그 자체는 숫자 로그도 모두 문자열로 지정되어 있으므로, 타입을 확인하며 모두 문자로 출력된다. 따라서 다음과 같이 isdigit()을 이용해서 숫자 여부인지를 판별해 구분해본다. 이 경우 숫자로 변환 가능한 로그는 digits에, 그렇지 않은 경우 문자 로그는 letters에 추가된다.
여기서는 식별자를 제외한 문자열[1:]을 키로 하여 정렬하며, 동일한 경우 후순위로 식별자[0]을 지정해 정렬되도록, 람다 표현식을 이용해 정렬했다.
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
람다 표현식
람다 표현식이란 식별자 없이 실행 가능한 함수를 말하며, 함수 선언 없이도 하나의 식으로 함수를 단순하게 표현할 수 있다. 그러나 이 책에서는 람다 표현식보다 훨씬 더 간결하고 가독성이 높은 리스트 컴프리헨션을 주로 사용할 예정이다.
PREVIOUSLeetCode 819번 <가장 흔한 단어>
NEXTCodeUp 01-30 리뷰