937. Reorder Data in Log Files
문제 해석 :
두가지 단어로 구성되어있는 리스트가 주어진다.
Letter-logs와 Digit-logs가 있다.
Letter-logs : 식별자외에는 모두 소문자 영어 문자로 되어있다.
Digit-logs : 식별자 외에는 모두 숫자로 되어있다.
정렬 규칙:
1. Letter-logs는 순서상 Digit-logs보다 앞에 있다.
2. Letter-logs는 식별자보다 내용이 먼저 정렬되고, 내용이 같으면 식별자 순으로 정렬된다.
3. Digit-logs는 그대로 기존 정렬을 유지한다.
풀이 방법:
1. 식별자와 내용을 분리한다.
2. key로 사용할 함수를 생성한다.
3. 문자와 숫자 단어들에서 식별자를 제외하고, 무조건 문자, 숫자만 나오기 때문에 맨 앞자리만 확인해도 된다.
- 식별자에는 특별한 규칙이 없다. 내용만 확인하면 된다.
4. 내용순으로 정렬되고 그 다음 식별자 순으로 정렬 되기 때문에, 내용의 맨 앞자리로 확인하고 문자면 리턴값을 내용, 식별자로 지정한다.
5. 문자 단어가 먼저 정렬되어야해서 리턴값의 맨앞에 숫자 단어보다 작은 숫자를 리턴한다.
6. 숫자는 기존 정렬을 유지하기 때문에 문자 단어보다 큰값과 같이 리턴한다.
You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier.
There are two types of logs:
- Letter-logs: All words (except the identifier) consist of lowercase English letters.
- Digit-logs: All words (except the identifier) consist of digits.
Reorder these logs so that:
- The letter-logs come before all digit-logs.
- The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.
- The digit-logs maintain their relative ordering.
Return the final order of the logs.
Example 1:
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"] Explanation: The letter-log contents are all different, so their ordering is "art can", "art zero", "own kit dig". The digit-logs have a relative order of "dig1 8 1 5 1", "dig2 3 6".
Example 2:
Input: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"] Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
Constraints:
- 1 <= logs.length <= 100
- 3 <= logs[i].length <= 100
- All the tokens of logs[i] are separated by a single space.
- logs[i] is guaranteed to have an identifier and at least one word after the identifier.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
# key 에 사용할 함수
def get_key(log):
id_, rest = log.split(" ", maxsplit=1)
if rest[0].isalpha():
# 문자 단어는 0을 추가해서 리턴
return (0, rest, id_)
else:
# 숫자 단어는 1을 추가해서 그대로 리턴
return (1, )
return sorted(logs, key=get_key)
'컴퓨터공학 > LeetCode 1000' 카테고리의 다른 글
[LeedCode] 56. Merge Intervals 파이썬 Medium (0) | 2021.10.31 |
---|---|
[LeetCode] 1710. Maximum Units on a Truck 파이썬 easy 정렬 (0) | 2021.10.30 |
[LeetCode/릿코드] - 10. Regular Expression Matching - (Hard/하드) (0) | 2021.07.31 |
[LeetCode/릿코드] - 4. Median of Two Sorted Arrays - (Hard/하드) (0) | 2021.07.28 |
[LeetCode/릿코드] - 238. Product of Array Except Self (Medium/미디엄) (0) | 2021.07.26 |