코딩테스트

[프로그래머스][KAKAO_BLIND][2018] 파일명 정렬

pythaac 2021. 8. 11. 02:58
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

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

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

programmers.co.kr

 

내가 작성한 코드

import re

def solution(files):
    def order(s):
        head_number = re.match("^\D*\d{1,5}", s).group(0)
        number = re.sub("\D*", "", head_number)
        head = re.sub(number, "", head_number).lower()
        return (head, int(number))

    return sorted(files, key=order)
  • 숫자가 나오기 전까지는 HEAD, 대소문자 차이를 없애기 위해 소문자로 바꿈
  • HEAD뒤의 숫자 1~5개는 NUMBER, 숫자취급을 위해 int로 변경
  • HEAD를 key로 sort, HEAD가 같으면 NUMBER로 sort

 

다른 사람이 작성한 코드

import re

def solution(files):
    a = sorted(files, key=lambda file : int(re.findall('\d+', file)[0]))
    b = sorted(a, key=lambda file : re.split('\d+', file.lower())[0])
    return b
  • 숫자 패턴으로 split하고, 첫 요소를 HEAD로 사용
  • 정렬 순서가 NUMBER- > HEAD와 HEAD -> NUMBER가 같음 (stable sort이기 때문)

 

기억해야할 것

  • 문자열을 다룰 때, 정렬을 포함한 패턴을 찾는 문제에서는 regex를 모르면 풀기 힘든 것 같다