일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 아스테리스크 #Asterisk #파이썬
- dfs #그래프 #graph #python #leetcode #course #schedule
- leetcode #subsets #dfs #itertools #python
- final #java #자바 #안드로이드
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- 파이썬 #zip
- dfs #python #leetcode
- leetcode #python #dfs #재귀
- 코틀린 #Do it #깡샘 #안드로이드
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- dfs #python #leetcode #combination
- python #백준 #9375 #패션왕 #신해빈
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- gcd #최대공약수 #백준 #2981 #검문
- 2004 #조합 0의 개수 #백준
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- dfs #leetcode #python #graph #그래프
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- Python #leetcode #dfs #그래프 #백트래킹
- dfs #bfs #이진트리 #파이썬 #리트코드
- dfs #bfs #leetcode #python
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- 리트코드 #팰린드롬 #파이썬
- dfs #leetcode #python
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode] 937. 로그 파일 재정렬(Reorder Log Files) 본문
로그를 재 정렬한다. 기준은 다음과 같다.
1. 로그의 가장 앞부분은 식별자이다.
2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
3. 식별자는 보통 순서에 관여하지는 않지만 문자가 동일한 경우 식별자 순으로 한다.
4. 숫자 로그는 입력된 순서대로 한다.
Input : ["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"]
내가 푼 코드(답 힐끗 모드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
alpha = list()
numeric = list()
# 알파벳 로그와 숫자 로그를 분리
for i in range(len(logs)):
string = ''.join((logs[i].split())[1:])
if string.isalpha():
alpha.append(logs[i])
else:
numeric.append(logs[i])
#alpha 정렬
alpha.sort(key=lambda x : (' '.join(x.split()[1:]),''.join(x.split()[0])))
return alpha+numeric
|
cs |
해설 :
제일 먼저 해야될 것은 문자 로그와 숫자 로그로 분리하는 것이다.
따라서 문자열에서 식별자를 분리한 것을 isalpha() 함수를 이용하였다.
그 후 13번 줄이 핵심인데 sort 함수에 key 값을 람다 표현식으로 넣는 것이다.
중괄호 내부에서 문자가 동일한 경우 식별자를 이용한 비교를 후 순위로 하도록 했다
(이 부분 도저히 생각이 안 나서 눈팅했음).
** 깔끔한 답지 **
1. 람다와 +연산자를 이용
1
2
3
4
5
6
7
8
9
10
11
12
|
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)
# 2개의 키를 람다 표현식으로 정렬
letters.sort(key=lambda x : (x.split()[1:],x.split()[0]))
return letters + digits
|
cs |
해설 :
군더더기가 없다...
우선 line 4에서 logs를 저런 식으로 꺼내 쓸 수 있는 스킬도 염두해야 될 것 같다.
line 5에서 어차피 숫자 로그 전체를 isdigit()할 필요는 없고
하나만 숫자여도 로그 전체가 숫자일 테니 이런 식으로 간결하게 표현할 수 있다
(나는 split도 하고 join도 하고 너저분했음).
하이라이트는 line 11인데 문자 로그를 비교할 때 식별자는 제외하고 비교를 해야 하기 때문에
key를 사용하여 범위를 한정해준다.
후순위로 식별자로 비교를 해야 하므로 (1순위, 2순위)의 형식을 취한다.
마지막으로 리스트를 + 연산자를 이용하면 하나의 리스트로 합쳐지게 된다.
출처 : 파이썬 알고리즘 인터뷰 (글 : 박상길 그림 : 정진호) [책만]
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode] 5. 가장 긴 팰린드롬 부분 문자열(Longest Palindrom Substring) (0) | 2021.06.26 |
---|---|
[LeetCode] 49. 그룹 애너그램(Group Anagrams) (0) | 2021.06.26 |
[LeetCode] 819. 가장 흔한 단어(Most Common Word) (0) | 2021.06.25 |
[LeetCode] 344. 문자열 뒤집기( Reverse String) (0) | 2021.06.24 |
[125번]유효한 팰린드롬(Valid-palindrome) (0) | 2021.06.24 |