LeetCode
[LeetCode/리트코드] No.937, 로그 파일 재정렬(Reorder Data in Log Files) - Python
CoGam
2023. 8. 2. 19:17
728x90
이 문제는 로그 파일의 재정렬 이라는 문제이다. 문제 제목부터 어려워 보이지만 그저 리스트 속의 문자열을 파일로 볼 때, 문자파일과 숫자파일을 규칙에 맞게 정렬하면 되는 문제이다.
문제 조건:
- 문자열의 제일 앞 단어는 Identifier(식별자)이다.
- 문자로 구성된 문자파일은 모두 소문자로 구성된다.
- 숫자 파일은 정수로 구성된다.
재배열 규칙:
- 문자파일은 숫자파일보다 항상 앞에 온다.
- 문자파일은 사전 순으로 재배열한다.
- 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일한 경우는 식별자의 순서로 배열한다.
- 숫자파일은 입력 순서 그대로 배열한다.
결국 복잡한 기준들을 모두 만족하는 정렬을 잘 해야한다...
그렇다면 가장 큰 기준부터 세부적인 기준으로 들어가며 정렬하는 것이 바람직 할 것이다. 마지막 '재배열 규칙'에 따라 숫자와 문자파일을 분리할 때 순서가 흐트러지지 않는다면 숫자파일에 대해서는 따로 정렬이 필요하지 않다.
따라서 이후 문자파일에 대한 정렬만 sort()함수를 이용하여 처리하면 된다.
sort(key=)를 통해 여러 정렬 조건을 설정 가능하고 우선순위도 부여 가능해진다.(오래전에 배워서 까먹은 부분이라 애를 먹었다)
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
digits = []
letters = []
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
해설: 위에서 생각한 설계에 맞춰서 코드를 작성하면 이렇게 된다.
digits와 letters 라는 리스트를 만들어서 그 둘을 분리해준다. 살펴본 것처럼 letters 는 가공이 필요하므로 sort(key=lambda )를 이용하여 letters 리스트 안의 문자열을 하나씩 가져와서 조건에 맞는 정렬기준 두 가지를 작성해준다.
반응형