책읽기

[파이썬 알고리즘 인터뷰][문자열] 로그 파일 재정렬 (중요)

pythaac 2021. 7. 16. 12:00
이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 

출처 : https://www.onlybook.co.kr/entry/algorithm-interview

 

문제 정의

로그 재정렬 기준

  1. 가장 앞 부분은 식별자
  2. 우선순위 : 문자 > 숫자
  3. 문자가 같으면 식별자
  4. 숫자 로그는 입력 순서 유지

 

책에서 구현된 코드

def reorderLogFiles(self, logs: list[str]) -> list[str]:
    letters, digits = [], []
    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

 

기억해야할 기법

  • 문제 파훼 자체를 못함
    • 조건이 다른 문자와 숫자를 분리하여야함
      - str & str / str & digit / digit & digit 이 3가지 case로 나누었음
    • 까다로운 정렬의 조건을 lambda로 표현 가능 (매우 중요)
      - 기본 내장 비교 연산부터 고민하고 있었음 ( 'a' < 'b'의 return은 뭐로 해야하나? / 문자열의 길이에 따른... 등등 )
      - compare 함수 자체를 정의하려했음
    • 문제를 해결하면서 효율성의 늪에 빠지지 말 것
      - 새로운 리스트를 만들지 않고, 리스트 내에서 해결하려함
  • 문자의 리스트끼리 비교연산 가능
    • >> ['a', 'b', 'c'] < ['c', 'd', 'e']
      True

 

내가 구현한 코드

None
  • 예전에 한 면접에서 비슷한 질문의 라이브코딩을 했었다
  • 지금처럼 구현을 제대로 못하고 compare 함수 만들고서 털렸다
  • 해결 전략을 항상 low level에서 바라보는 것 같다
  • 문제를 해결하는데에 집중하자