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

 

<문제>

로그로 이루어진 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개의 기준도 설정할 수 있다

 

+ Recent posts