풀이 과정


  1. 문자열을 소문자로 변환

  2. 문자열의 왼쪽에서부터 숫자를 만날때까지 탐색(HEAD)

  3. 숫자 만난 시점에서부터 숫자를 만나지 않는 시점까지 탐색(NUMBER)

  4. [HEAD, NUMBER, 원래 문자열, 인덱스] 순으로 임시로 저장

  5. HEAD, NUMBER, 인덱스 순으로 정렬(인덱스 순으로 정렬하는 이유는 원래 입력에 주어진 순서를 유지해야 하기 때문)

  6. 순차적으로 원래 문자열을 정답 리스트에 저장


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

+ Recent posts