풀이 과정
문자열을 소문자로 변환
문자열의 왼쪽에서부터 숫자를 만날때까지 탐색(HEAD)
숫자 만난 시점에서부터 숫자를 만나지 않는 시점까지 탐색(NUMBER)
[HEAD, NUMBER, 원래 문자열, 인덱스] 순으로 임시로 저장
HEAD, NUMBER, 인덱스 순으로 정렬(인덱스 순으로 정렬하는 이유는 원래 입력에 주어진 순서를 유지해야 하기 때문)
순차적으로 원래 문자열을 정답 리스트에 저장
import re
def get_str(name):
s = ""
pos = 0
for i in range(len(name)):
if name[i].isdigit():
pos = i
break
s += name[i]
return (s, pos)
def get_num(name, start):
pos = 0
for i in range(start, len(name)):
if not name[i].isdigit():
pos = i
break
if pos == 0:
pos = len(name)
return pos
def solution(files):
answer = []
filelist = []
for idx, file in enumerate(files):
fileorg = file
file = file.lower()
head, src = get_str(file)
dest = get_num(file, src)
number = file[src:dest]
filelist.append([head, number, fileorg, idx])
filelist.sort(key=lambda x:(x[0], int(x[1]), x[3]))
for f in filelist:
answer.append(f[2])
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 다음 큰 숫자 (0) | 2021.07.08 |
---|---|
[ Lv 2 ] [3차] n진수 게임.py (0) | 2021.07.07 |
[ Lv 2 ] [3차] 압축 (0) | 2021.07.05 |
[ Lv 2 ] 올바른 괄호 (0) | 2021.07.05 |
[ Lv 2 ] 땅따먹기 (0) | 2021.07.04 |