(MEDIUM) LeetCode No.937 - Reorder Data in Log Files

Kade Jeon·2024년 1월 31일

LeetCode

목록 보기
3/6

(MEDIUM) LeetCode No.937 - Reorder Data in Log Files 풀러가기

문제

  • 로그의 맨 앞부분은 식별자
  • 문자로 구성된 로그가 숫자 로그보다 앞에 온다
  • 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우(식별자를 제외한 내용) 식별자 순으로 한다.
  • 숫자 로그는 입력 순서대로 한다.

난이도?

교재에는 별 한 개짜리로 난이도가 쉽다고 표현함. 그러나 Leetcode에는 Medium으로 표기되어 있다.

문제풀이

교재에는 딱 한 가지 코드가 있었다. 정답을 보진 않았지만, 몇 가지 내용을 참고하면서 1시간 54분만에 풀어냈다. Python에서 Lambda가 어떻게 쓰이는지 이해하는데 오래걸렸다...

교재에서 참고한 내용 - idDigit(), Lambda, List끼리 더하기

  • 식별자 다음에 위치한 내용이 숫자인지 문자인지 파악하기 위해 isDigit()을 이용하여 판별하여 구분하였다.
  • Lambda를 이용하여 List를 정렬하였다.
  • List와 List를 더하면 바로 합쳐진다.
a = [1, 2, 3]
b = ['a', 'b', 'c']

a + b
> [1, 2, 3, 'a', 'b', 'c']
b + a
> ['a', 'b', 'c', 1, 2, 3]

내가 제출한 코드

  • Language: Python3
class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        #식별자 별로 구분하기 위해 각각 리스트를 생성
        letters: List[str] = []
        digits: List[str] = []
        
        # input log데이터에서 식별자 다음이 숫자인지, 문자인지 구분하여 각각 리스트에 담는다.
        for log in logs:
            if log.split()[1].isdigit():
                digits.append(log)
            else:
                letters.append(log)
        #숫자로그는 입력 순서대로이기 때문에 그냥 담아 반환하면 되므로 별도 정렬이 필요 없다.

        #문자로그는 식별자 뒤 문자 순서대로 정렬 후
        #식별자 순으로 정렬 (문자 로그가 같은 경우를 위해서)
        letters.sort(key=lambda x:(x.split()[1:], x.split()[0]))
 
        return letters+digits

결과

아직은 모르는 게 많아 교재를 통해 배우고 있는 중이다. 이번 문제는 필요한 함수와 람다 정도만 확인했는데 결과적으로 교재에서 제공해주는 정답과 동일하게 나왔다.

다만 교재의 입력과 출력 예시가 1개 밖에 나오지 않아 코드를 제출했을 때, 다른 테스트에서 많이 걸려서 여러차례 수정을 거듭했다. 문제를 제대로 읽었으면 단순히 출력만 잘나오게 코드를 짜지 않았을텐데 바보같았다.

첫 Medium 레벨을 풀게 되다니 !

profile
안녕하세요. 백엔드 개발자가 되고 싶은 Kade 입니다.

0개의 댓글