리트코트 문제 풀이 Medium 937번
문제
배열 logs가 제공 되었을 때, 로그는 공백으로 구분된 문자열이며 첫번째 단어는 식별자입니다.
다음과 같은 두 가지 유형의 로그가 있습니다.
- Letter-logs : 식별자를 제외한 모든 단어는 영문 소문자로 구성됩니다.
- Digit-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"]
제약:
- 1 <= logs.length <= 100
- 3 <= logs[i].length <= 100
- 의 모든 토큰은 단일 공백 logs[i]으로 구분됩니다 .
- logs[i]식별자와 식별자 뒤에 적어도 한 단어가 있음을 보장합니다.
풀이접근
"let1 art can" 이라는 로그를 보면 공백으로 구분 된 세 문자열로 구성됨을 볼 수 있고, 이 중 첫번째 단어인 let1은 식별자이다. 식별자를 제외한 art can 이 문자이기 때문에 문자 로그이다.
"dig1 8 5 1" 로그는 dig1이 식별자이고 이를 제외한 문자들이 숫자이므로 숫자 로그이다.
1. 먼저 문자로그들과 숫자 로그들을 구분해서 모아둔다.
2. 문자로그들을 abc 순으로 나열하고(식별자 제외), 동일한 순서가 있는경우는 식별자를 이용해 나열한다.
3. 숫자 로그들은 문자 로그들 나열 이후에 그냥 입력 순차적으로 나열한다.
1. 로그들은 모두 ""로 문자열로 된 형태이므로, 파이썬 string 메소드 중 isdigit()을 사용해 해당 문자열이 숫자로만 이루어져있을 경우 true, 숫자가 아닌것이 포함되면 false를 리턴받도록 하여 문자로그, 숫자로그를 구분할 수 있다.
2. 식별자를 제외한 문자들로 abc 나열, 동일한 경우가 있으면 식별자를 통한 나열을 진행하기 위해서는 람다식을 이용해 배열.sort(key=lambda x:(x.split()[1:], x.split()[0]) 로 쓸 수 있다.
3. 이후에 + 식을 이용해 문자 로그 뒤에 숫자 로그들을 붙여서 리턴해준다.
class Solution:
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
체크포인트
- 파이썬 isdigit()
- sort
- lambda
- split()[1:], split()[0]
파이썬 알고리즘 인터뷰 148p 참고
'스터디 > 알고리즘풀기' 카테고리의 다른 글
[알고리즘] 이진탐색 알고리즘 (0) | 2023.02.02 |
---|---|
[알고리즘] 정렬 알고리즘 (0) | 2023.01.28 |
[알고리즘] 그래프 탐색 알고리즘 DFS/BFS (0) | 2023.01.20 |
[알고리즘] 그리디 알고리즘 (0) | 2023.01.18 |
[파이썬] 파이썬문법 (0) | 2023.01.18 |