Algorithm
로그파일 재정렬
Hoonco
2023. 1. 15. 17:34
문제
로그를 재정렬하라, 기준은 다음과 같다.
- 로그의 가장 앞 부분은 식별자다.
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
- 숫자 로그는 입력 순서대로 한다.
예제 1.
logs = ["digl 8 15 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"]
출력
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'digl 8 15 1', 'dig2 3 6']
내가 짠 코드는 아래와 같다.
logs = ["digl 8 15 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"]
def solution(logs):
numeric = []
alpha = []
for log in logs:
# 숫자와 알파벳 구분
if log.split()[1].isdigit():
numeric.append(log)
else:
alpha.append(log)
# sort key를 사용해서 우선순위 선정 ( 두번째 문자열 비교로 1차 첫번째 문자열 비교로 2차적으로 정렬 )
alpha.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return alpha + numeric
print(solution(logs)) #['let1 art can', 'let3 art zero', 'let2 own kit dig', 'digl 8 15 1', 'dig2 3 6']
먼저 문자로 구성된 로그가 숫자 로그보다 이전에 오며 숫자 로그는 입력 순대로 둔다.
그렇다면 문자와 숫자를 구분하고 나중에 이어 붙이면 된다.
따라서 로그를 공백 기준으로 짜르고 1번 인덱스에 있는 요소가 숫자인지 확인한다.
따로 만든 alpha, numberic 리스트에 배분한다.
이후 sort 함수를 이용한다.
Python의 sort함수는 람다식으로 key 값을 지정하여 정렬에 대한 기준을 설정할 수 있다.
식별자를 제외한 문자열 [1:]을 키로하여 동일한 경우 0번 인덱스를 기준으로 지정하여 정렬되도록 한다.
배분한 리스트들을 다시 합침으로써 완성된다.