https://leetcode.com/problems/reorder-data-in-log-files/
로그를 재정렬하라. 기준은 다음과 같다.
1. 로그의 가장 앞 부분은 식별자이다.
2. 문자로 구성된 로그가 수자 로그보다 앞에 온다.
3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
4. 숫자 로그는 입력 순서대로 한다.
이 문제는 조건부로 정렬할때를 대비해서 연습해두면 좋을것 같은 문제이다.
먼저 isdigit()을 이용해서 숫자 여부인지를 판별해 구분해본다.
그전에 split() 함수는 다음과 같은 작업을 수행해준다.
logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
for log in logs:
print(log.split())
그럼으로 다음 코드에서 split()[1] 은 리스트의 두번째 인자를 가지고 비교하는 것이다.
def reorderLogFiles(logs):
letters,digits=[],[]
for log in logs:
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
# 정렬기준: 문자열[1:]을 키로 하여 정렬하며, 동일한 경우 후순위로 문자열[0]을 지정
letters.sort(key=lambda x: (x.split()[1:],x.split()[0]))
return letters+digits
여기서 제일 앞 문자를 제외한(이 문제에서는 식별자라고 한다) 문자열[1:]을 키로 하여 정렬하며, 동일한 경우 후순위로 식별자 [0]을 지정해 정렬되도록 람다 표현식을 이용해 정렬했다.
'알고리즘' 카테고리의 다른 글
7. 애너그램 (Defaultdict, join 활용, 파이썬 내장 정렬함수,sorted,sort) (0) | 2021.08.16 |
---|---|
6. 문자열 관리(re 모듈을 통한 전처리) (0) | 2021.08.16 |
4. 문자열 뒤집기 (0) | 2021.08.16 |
3. 문자열 - 유효한 펠린드롬 (0) | 2021.08.16 |
2. 딕셔너리의 주요 연산 시간 복잡도 및 특징 (0) | 2021.08.16 |