로그 파일 재정렬 Reorder Log Files

Jisoo Ha·2022년 11월 6일
0

리트코드 937. Reorder Log Files

🤔 Q. 로그를 재정렬하라. 기준은 다음과 같다.

  1. 로그의 가장 앞 부분은 식별자다.
  2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
  3. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
  4. 숫자 로그는 입력 순서대로 한다.

입력

logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"]

출력

["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"]

✏️ 풀이1 : 람다와 + 연산자를 이용

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)
    
    # 2개의 키를 람다 표현식으로 정렬
    letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
    return letters + digits
  • 요구 조건을 얼마나 깔끔하게 처리할 수 있는지를 묻는 문제다. 실무에서도 이 같은 로직은 자주 쓰이는 만큼 매우 실용적인 문제로 볼 수 있다.
  • letters.sort(key=lambda x: (선순위, 후순위)) 로 정렬해준다.

람다 표현식
식별자 없이 실행 가능한 함수. 함수 선언 없이도 하나의 식으로 함수를 간단히 표현할 수 있다.
하지만 훨씬 간결하고 가독성이 높은 리스트 컴프리헨션(List Comprehension)을 주로 사용한다.
꼭 필요한 경우와 더 편리할 경우에 한해 람다 표현식을 사용한다.

# 람다 표현식
s.sort(key=lambda x: (x.split()[1], x.split()[0]))
# 직접 함수 선언
def func(x):
	return x.split()[1], x.split()[0]
s.sort(key=func)
profile
우주 먼지

0개의 댓글