반응형
https://leetcode.com/problems/reorder-data-in-log-files/
Reorder Data in Log Files - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
<문제 조건>
- 로그의 가장 앞 부분은 식별자다.
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
- 숫자 로그는 입력 순서대로 한다.
- 각 리스트에 주어진 문자열에서 맨 처음에 오는 단어는 식별자이다. 식별자를 제외하고 뒤에 오는 단어들을 기준으로 정렬해줘야 한다.
- 문제 조건으로 문자로 구성된 로그가 숫자보다 먼저 온다고 하였으므로, 문자열로 구성된 로그와 숫자로 구성된 로그를 각각 구분하여 리스트에 저장해준다.
- 숫자 로그는 입력 순서대로 한다고 하였으므로, 따로 정렬해주지 않는다. 하지만 문자열 로그는 단어 순서대로 정렬해줘야 하므로 리스트의 sort()함수에 key값을 줘서 어떤 것을 기준으로 정렬할 것인지 알려줘야 한다.
- 먼저 split()함수를 사용하여 공백을 기준으로 문자열을 각 단위별로 구분해준다. 식별자 뒤에 등장하는 단어들을 기준으로 정렬해야 하므로 단어들이 위치한 인덱스인 [1:]을 써준다. 그리고 만약 "let1 art can","let3 art zero" 혹은 "let1 art can","let1 art zero" 처럼 art가 겹치는 경우에는 맨 앞에 있는 식별자를 기준으로 구분해줘야 하므로 식별자가 위치한 인덱스 [0]을 써준다. 이렇게 2개의 기준을 한 쌍으로 정렬하게 해야 하므로 겉에 ()를 써서 감싸준다.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
digit_list = [] # 숫자 로그 리스트
string_list = [] # 문자열 로그 리스트
for log in logs:
if log.split()[1].isdigit(): # 맨 앞의 식별자를 빼고 난 다음에 오는 로그가 문자열인지 숫자인지 판단하여 각각의 리스트에 저장
digit_list.append(log)
else:
string_list.append(log)
string_list.sort(key = lambda stlist : (stlist.split()[1:], stlist.split()[0]))
# 공백을 기준으로 문자열 로그를 word단위로 각각 구분해준다.
# 로그의 식별자를 제외하고 등장하는 문자열들을 비교하여 순차적으로 나열 & 식별자를 기준으로 순차적으로 나열
# 위 2개의 기준을 한쌍으로 넘겨 문자열 로그를 정렬한다.
sorted_logs = string_list + digit_list # 정렬된 문자열 로그와 숫자 로그 리스트를 합친 로그 생성
return sorted_logs
"""
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
"""
반응형
'파이썬 알고리즘 인터뷰' 카테고리의 다른 글
문제 4 (Q819) - 가장 흔한 단어 (0) | 2022.06.14 |
---|---|
문제 2 (Q344) - 문자열 뒤집기 (0) | 2022.06.14 |
문제 1 (Q125) - 유효한 팰린드롬 (0) | 2022.06.14 |