문자열 조작_3. Reorder Data in Log Files
leetcode 937. Reorder Data in Log Files
문제
로그를 재정렬하라. 기준은 다음과 같다.
1. 로그의 가장 앞 부분은 식별자.
2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
3. 문자가 동일한 경우는 식별자 순으로 한다.
4. 숫자 로그는 입력 순서대로 한다.
입출력예시
- 입력: log = ["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"]
풀이
먼저 문자와 숫자를 구분한 뒤 문자 로그를 람다 표현식(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
- runtime: 40 ms
- memory: 14.4 MB
자바스크립트
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];
};
- runtime: 84 ms
- memory: 43.2 MB
참고
파이썬 알고리즘 인터뷰
Author And Source
이 문제에 관하여(문자열 조작_3. Reorder Data in Log Files), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sy3783/문자열-조작3.-Reorder-Data-in-Log-Files저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)