일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 객체지향의 사실과 오해
- 리스트복사
- v-for
- 10926번
- LeetCode
- MSA
- Python
- 우테코
- 3003번
- DevOps
- 쿠버네티스
- 실행 컨텍스트
- 도커
- JavaScript
- hoisting
- 빅오표기법
- 이벤트버블링
- 파이썬
- v-if
- 프리코스
- 젠킨스
- v-on
- 백준
- 2588번
- 코어자바스크립트
- vue
- 이벤트캡쳐링
- v-model
- 배열파티션
- 10869번
Archives
- Today
- Total
새오의 개발 기록
Leetcode 937: 로그 파일 재정렬 본문
로그를 재정렬 하라.
조건
- 로그의 가장 앞 부분은 식별자이다.
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 로그의 내용을 기준으로 정렬하고 내용이 동일할 경우, 식별자를 기준으로 정렬한다.
- 숫자 로그는 입력받은 순서대로 한다.
// 입력 예제
logs = ["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"]
풀이
1. lambda
입력 받은 로그를 split()을 이용하여 숫자인지 영어인지 확인하여 각각 리스트에 추가한다.
영어 로그인 경우 sort(key=lambda)를 이용하여 로그의 내용 기준으로 정렬하고 내용이 같으면 식별자를 기준으로 정렬한다.
영어 로그 리스트 + 숫자 로그 리스트의 순서로 두 문자열을 합친다.
def reorderLogFiles(self, logs):
digits = []
letters = []
for log in logs:
# split()은 빈칸을 다 잘라서 배열을 만들어 줌
# 배열의 두 번째 값이 숫자인지 확인
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
# lambda 함수: 식별자가 없는 함수. 함수 선언 없이 라인 상에서 함수를 구현하고 싶을 때 사용
# x를(log) split해서 [1:] 문자열, [0] 식별자 로 정렬함
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letters + digits
+ lambda 함수 보충
한 마디로 함수를 딱 한 줄로 만들 수 있게 해주는 훌륭한 녀석
sort()함수를 사용할 때 자주 사용함
lambda를 가지고 변형 값 만든 후 이 값을 기준으로 정렬
lambda 매개변수 : 표현식
# 두 수를 더하는 함수
>>> def hap(x, y):
... return x + y
...
>>> hap(10, 20)
30
# lambda로 표현하면
>>> (lambda x,y: x + y)(10, 20)
30
# sort()함수에서 lambda를 사용하면
>>> a[(1,2),(0,1),(5,1),(5,2),(3,0)]
>>> b=sorted(a)
>>> b
[(0,1),(1,2),(3,0),(5,1),(5,2)]
# 정렬 기준 key를 튜플의 첫번째 값으로 지정
>>> c=sorted(a,key=lambda x:x[0])
>>> c
[0,1),(1,2),(3,0),(5,1),(5,2)]
# 정렬 기준 key를 튜플의 두번째 값으로 지정
>>> d=sorted(a,key=lambda x:x[1])
>>> d
[(3,0),(0,1),(5,1),(1,2),(5,2)]
참고
'Algorithm > Leetcode' 카테고리의 다른 글
Leetcode 1: 두 수의 합 (0) | 2022.10.03 |
---|---|
Leetcode 49: 그룹 애너그램 (0) | 2022.10.02 |
Leetcode 819: 가장 흔한 단어 (0) | 2022.10.01 |
Leetcode 125: 유효한 팰린드롬 (0) | 2022.09.30 |
Leetcode 344: 문자열 뒤집기 (1) | 2022.09.30 |