파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.
# 문제 설명
937번 Reorder Log Files은 다음 규칙에 따라 로그를 재정렬하는 문제이다.
1. 로그의 가장 앞 부분은 식별자
2. 문자로그는 숫자 로그보다 앞에 온다
3. 문자로그를 정렬할 때 문자가 동일할 경우 식별자 순으로 함
4. 숫자 로그은 입력 순서대로 함
# 풀이방법 1 - lamda와 + 연산자 이용 (책 풀이 참고)
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
letterLogs = []
digitLogs = []
for log in logs :
if log.split()[1].isalpha() == True :
letterLogs.append(log)
else :
digitLogs.append(log)
letterLogs = sorted(letterLogs, key=lambda a : (a.split()[1:], a.split()[0]))
return letterLogs + digitLogs
1. 문자로그와 숫자로그를 구분하여 각각 리스트로 저장한다.
2. 문자로그의 경우 문자인 [1] 인덱스 알파벳으로 정렬을 하지만, 문자열이 같은 경우에는 식별자인 [0] 인덱스를 이용하여 정렬을 한다.
3. 마지막으로 문자로그와 숫자로그를 +로 합친다.
| 핵심 |
letterLogs = sorted(letterLogs, key=lambda a : (a.split()[1:], a.split()[0] ) )
return letterLogs + digitLogs
# 결과
'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글
[LeetCode_238] 자신을 제외한 배열의 곱 (0) | 2022.02.06 |
---|---|
[LeetCode_5] 가장 긴 팰린드롬 부분 문자열 (0) | 2022.02.06 |
[LeetCode_49] 그룹 애너그램 (0) | 2022.02.06 |
[LeetCode_344] 문자열 뒤집기 (0) | 2022.02.06 |
[LeetCode_125] 유효한 팰린드롬 (0) | 2022.02.06 |