프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/courses/30/lessons/17686
내가 작성한 코드
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를 모르면 풀기 힘든 것 같다
'코딩테스트' 카테고리의 다른 글
[백준][구간합] 구간 합 구하기 (0) | 2021.08.12 |
---|---|
[백준][문자열] 부분 문자열 (0) | 2021.08.11 |
[백준][문자열] Cubeditor (0) | 2021.08.11 |
[프로그래머스][KAKAO_BLIND][2020] 문자열 압축 (0) | 2021.08.10 |
[프로그래머스][KAKAO_BLIND][2020] 가사 검색 (0) | 2021.08.10 |