문제
programmers.co.kr/learn/courses/30/lessons/17686
처음 작성한 코드
def solution(files):
import re
answer = [[i,re.findall('([a-zA-Z-.]+)(\d+)',files[i].lower())] for i in range(len(files))]
answer.sort(key= lambda x:(x[1][0][0],int(x[1][0][1])))
result = []
for i in answer:
result.append(files[i[0]])
return result
- 문자와 숫자 부분을 정규식을 통해 나눈다.
- 문자부분과 숫자부분을 key로 하여 정렬한다.
- 정렬된 배열에 인덱스를 참조하여 반환할 배열에 넣어준다.
-> 처음에 index를 함께 넣어서 정렬이 됐을 때, 만약 5,2,3,4,1 이렇게 되면 5번째 인덱스 먼저 append하게 짜려고 index도 함께 저장했다.
깨달은 점
- 정규식에 대해 한번 더 짚고 넘어간다. '?' 이걸 쓰면 있어도 되고 없어도 된다는 뜻이다.
- 코드에서 [a-zA-Z-. ]라고만 안하고 ( ) 이걸로 묶은 이유는 그렇게 되면 [문자, 숫자] 배열로 뽑아주기 때문이다. ( )이걸로 안 묶으면 그냥 문자열로 뽑아준다.
- sort 할 때, key를 두개 줄 수 있다. 여기서는 첫째로 문자를 하고 첫째가 같으면 숫자로 판별하는 ? 그렇게 하기 때문에 key를 저렇게 줬다. x[1][0][0]가 문자고 x[1][0][1]가 문자열형식의 숫자 즉 '123' 이거라 int로 형변환 했다.
'Programmers' 카테고리의 다른 글
[프로그래머스] 방금그곡 (0) | 2021.02.08 |
---|---|
[프로그래머스] n진수 게임 (0) | 2021.02.05 |
[프로그래머스] 짝지어 제거하기 (0) | 2021.01.30 |
[프로그래머스] 폰켓몬 (0) | 2021.01.30 |
[프로그래머스] 소수 만들기 (0) | 2021.01.28 |