leetcode 937. Reorder Data in Log Files
로그를 재정렬하라. 기준은 다음과 같다.
1. 로그의 가장 앞 부분은 식별자.
2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
3. 문자가 동일한 경우는 식별자 순으로 한다.
4. 숫자 로그는 입력 순서대로 한다.
먼저 문자와 숫자를 구분한 뒤 문자 로그를 람다 표현식(Lambda Expression)을 이용해 정리한 후 숫자를 나중에 그대로 이어붙인다.
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
const reorderLogFiles = (logs) => {
const digitLogs = [];
const letterLogs = [];
const body = s => s.slice(s.indexOf(' ') + 1); // get the body after identifier
const isNum = c => /\d/.test(c);
// if body same then compare identifier
const compare = (a, b) => {
const n = body(a).localeCompare(body(b));
if (n !== 0) return n;
return a.localeCompare(b);
};
for (const log of logs) {
if (isNum(body(log))) digitLogs.push(log);
else letterLogs.push(log);
}
return [...letterLogs.sort(compare), ...digitLogs];
};
참고
파이썬 알고리즘 인터뷰