문제

문제

programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

 

처음 작성한 코드

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
  1. 문자와 숫자 부분을 정규식을 통해 나눈다.
  2. 문자부분과 숫자부분을 key로 하여 정렬한다.
  3. 정렬된 배열에 인덱스를 참조하여 반환할 배열에 넣어준다.

answer 초기 값들

 -> 처음에 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