leetcode.com/problems/reorder-data-in-log-files/
<문제>
로그로 이루어진 array가 존재하고, 각 log는 문자열이 공백으로 구분되어 있따.
각각의 로그에서 첫 번째 단어는 알파벳과 숫자로 이루어진 식별자이고,
식별자 다음의 단어들은 소문자로만 이루어져 있거나 숫자로만 이루어져 있다.
식별자 외 소문자로만 이루어져 있는 로그를 letter-logs라고 부르고, 숫자로만 이루어져 있는 로그를 digit-logs라고 부른다.
모든 digit-logs는 letter-logs 뒤에 나오며,
letter-logs는 식별자 제외 문자 순서대로 정렬되어 있다. 문자가 동일한 경우 식별자에 따라 정렬이 이루어진다.
반면 digis-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"]
def solution_1(logs: list):
digits_logs = []
alpha_logs = []
for log in logs:
# 식별자 이후 문자만 혹은 숫자만 나오므로 다음과 같은 조건식 괜찮다
if log.split()[1].isdigit():
digits_logs.append(log)
else:
alpha_logs.append(log)
alpha_logs = sorted(alpha_logs, key=lambda x:(x.split()[1:], x.split()[0]))
return alpha_logs + digits_logs
if __name__ == "__main__":
logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"]
print(solution_1(logs))
<알게 된 내용>
* isdigit() / isnumeric() / isdecimal()
- isdigit : 문자열이 숫자로 이루어져 있는 지
- isnumeric : 문자열이 숫자로 이루어져 있는 지 + 숫자에 해당하는 텍스트도 인정 (isdigit보다 넓은 범위)
- isdecimal : int형 값으로 변환이 바로 가능한 문자열인지
* sorted / lambda
- sorted(list, lambda x:(x[0], x[1])) 이렇게 2개의 기준도 설정할 수 있다
'다전공_컴퓨터공학 > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘] 6장 - 문자열 조작 (group anagrams) (0) | 2020.11.03 |
---|---|
[파이썬 알고리즘] 6장 - 문자열 조작 (most common word) (0) | 2020.11.03 |
[파이썬 알고리즘] 6장 - 문자열 조작 (valid palindrome) (0) | 2020.11.02 |
[파이썬 알고리즘] 4장 - 자료형 (0) | 2020.10.31 |
[파이썬 알고리즘] 4장 - 빅오 (0) | 2020.10.31 |