honey_pot
[Python] [3차] 파일명 정렬 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17686
deque popleft를 이용해 앞부터 판별해서 head와 number를 구성해보려고 했더니 숫자가 뒤에 한번 더 나오는 파일명일 경우 머리 복잡해진다
re 의 match, search 기능을 사용하면 간단하게 풀수 있다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import re
def solution(files):
src = [] # 정렬에 사용할 소스(헤드,넘버), 마지막에 순서대로 files의 요소를 지정할 인덱스 저장
for idx,file in enumerate(files):
file = file.lower() # file 내 영문자 모두 소문자로 변환
head = re.match('[\D]+', file) # file의 처음부터 숫자 제외 문자에 해당하는 값 매치(숫자 만나면 종료)
number = re.search('[0-9]+', file) # file 내의 숫자 한자릿수 이상 찾아서 저장(처음에 나오는 숫자를 찾으면 종료하므로 사이에 문자를 끼고 숫자가 두군데 나올 경우 뒷 부분 숫자는 찾지 않음)
src.append([head[0], int(number[0]), idx]) # re.함수 객체의 [0]: 함수로 찾은 re 객체 정보 span=실제 값의 인덱스 간격, [1]: re 함수로 찾은 실제 값
# 0010 같은 숫자를 int 캐스팅으로 10으로 바꿈
# head, number로 소스들 정렬
src.sort(key=lambda x: (x[0],x[1],x[-1]))
# 정렬된 소스의 끝에 저장된 인덱스로 files의 요소를 순서대로 뽑아 리스트로 만듦
answer = list(map(lambda x: files[x[-1]], src))
return answer
|
cs |
'문제 풀이' 카테고리의 다른 글
[python] 예상 대진표 (0) | 2022.08.06 |
---|---|
[python] 방금 그곡 (0) | 2022.08.05 |
[python] 주차 요금 계산 (0) | 2022.07.31 |
[Python] 올바른 괄호 (0) | 2022.07.14 |
[Python] 땅따먹기 (0) | 2022.07.14 |
Comments