코딩테스트 연습 - [3차] 파일명 정렬 | 프로그래머스 (programmers.co.kr)

문제에 대한 설명은 위 링크에서 읽어보는것이 훨씬 좋을 거에요

일단. 저는 문제를 두파트로 나눴습니다. 

1. 입력받은 files를 파일명, HEAD, NUMBER, TAIL로 나누는 부분
여기서 직접적인 변환을 해줄까 하다가.. 결국 출력할때, 원본 파일명이 필요했기에 그대로 나눠주도록했고, 
나누는 과정에서 toggle을 2개 사용했습니다. 
1번토글은 head까지만 1이고, 그 이후 0으로 변환시켜서 if문 분기하는데 사용됩니다 
2번토글은 number를 받는곳에만 사용되며 이때 사용된 조건문은 해당단어가 숫자이며 tog2==1이어야지만 실행되도록 구성했습니다. 
그리하여 head, number, tail을 나눠서줍니다.

2. 이후 sorted를 사용하여 조건에 맞게 소팅해주는것입니다.
key=lambda x : ~~ 를 사용하여, 문제의 조건에 맞게 소팅되도록 하였습니다. 
이후, 소팅순서에 맞게 HEAD,NUMBER,TAIL을 붙여줘서 return하도록 구성하였습니다.

def solution(files):
    flist=[]
    for i,file in enumerate(files):
        flist.append(splitfilename(file))
    flist = sorted(flist, key=(lambda x : (x[0].lower(), int(x[1]))))
    answer=[]
    for file in flist:
        tmp=''
        for i in file:
            tmp+=str(i)
        answer.append(tmp)
    # print(answer)
    return answer
def splitfilename(file):
    head,num,tail = '','',''
    tog1,tog2 = 1,1
    for i in range(len(file)):
        if file[i].isdigit()==False and tog1:
            head+=file[i]
        elif file[i].isdigit() and tog2:
            num+=file[i]
            tog1 = 0
        else:
            tail+=file[i]
            tog2 = 0
    # print(head,num,tail)
    return head, num, tail

# splitfilename('foo010bar020.zip')

files = ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
# files = ["F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat"]
solution(files)

 

 

'CODING TEST' 카테고리의 다른 글

이코테 _ 떡볶이떡  (0) 2021.06.18
파이썬 Python KAKAO_2019 인턴- 불량사용자  (0) 2021.06.18
파이썬 Python KAKAO_2018 캐시  (0) 2021.06.16
이코테-음료수 얼려먹기  (0) 2021.06.10
Greedy  (0) 2021.05.31

+ Recent posts