이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
문제 정의
로그 재정렬 기준
- 가장 앞 부분은 식별자
- 우선순위 : 문자 > 숫자
- 문자가 같으면 식별자
- 숫자 로그는 입력 순서 유지
책에서 구현된 코드
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
- >> ['a', 'b', 'c'] < ['c', 'd', 'e']
내가 구현한 코드
None
- 예전에 한 면접에서 비슷한 질문의 라이브코딩을 했었다
- 지금처럼 구현을 제대로 못하고 compare 함수 만들고서 털렸다
- 해결 전략을 항상 low level에서 바라보는 것 같다
- 문제를 해결하는데에 집중하자
'책읽기' 카테고리의 다른 글
[파이썬 알고리즘 인터뷰][문자열] 그룹 애너그램 (중요) (0) | 2021.07.16 |
---|---|
[파이썬 알고리즘 인터뷰][문자열] 가장 흔한 단어 (중요) (0) | 2021.07.16 |
[파이썬 알고리즘 인터뷰][문자열] 문자열 뒤집기 (0) | 2021.07.16 |
[파이썬 알고리즘 인터뷰][문자열] 유효한 팰린드롬 (0) | 2021.07.16 |
[데이터 분석을 위한 SQL 레시피][1장] 빅데이터 시대에 요구되는 분석력이란? (0) | 2021.07.15 |