[프로그래머스] 파일명 정렬 문제풀이 python

mauz·2022년 6월 28일
0
post-custom-banner

🐒 문제

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

✍ 나의 풀이

def solution(files):
    answer = []
    dic = dict()
    
    for file in files:
        headidx = ''
        numberidx = ''
        for i in range(len(file)):
            if file[i].isalpha() or file[i] in [' ','.','-']:
                if numberidx:
                    break
                headidx += file[i]
            elif file[i].isdigit():
                numberidx += file[i]
                
        dic[file] = [headidx.upper(),int(numberidx)]
        
    for i in sorted(dic.items(), key= lambda x:(x[1][0],x[1][1])):
        answer.append(i[0])
    
    return answer

테스트케이스 6,7,8,9가 계속 오답으로 나오길래 계속 붙잡고있었는데,
HEAD에 ' ', '.', '-'가 포함된다는 것을 놓치고있었다..


🧠 문제 이해

 files = ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]

위와 같이 입력이 주어졌을때,

파일명을 하나 꺼내보면 "img12.png"인데

파일명의 문자들을 하나씩 돌면서
숫자가 나오기 전까지를 HEAD로 지정하고 (대소문자 구분이 없어야함)
숫자부분은 NUMBER로 지정한다.
숫자 이후 부분은 날려버린다.

딕셔너리에 "img12.png"을 key로 하고, [HEAD ,NUMBER]을 value로 하는 방식으로

files의 모든 요소를 딕셔너리에 집어넣는다.

이후 HEAD와 NUMBER을 기준으로 딕셔너리를 정렬해서 answer에 key만 담아 리턴한다.


코드

def solution(files):
    answer = []
    dic = dict()	# 딕셔너리 선언
    
    for file in files:
        headidx = ''	# HEAD를 저장할 변수
        numberidx = ''	# NUMBER을 문자열 형태로 저장할 변수
        for i in range(len(file)):
            if file[i].isalpha() or file[i] in [' ','.','-']:	# 현재 문자가 알파벳과 공백, '.' , '-'이면
                if numberidx:	# NUMBER가 채워진 이후에 등장하는 문자는 TAIL이므로 볼 필요가 없다.
                    break
                headidx += file[i]	# HEAD에 추가한다.
            elif file[i].isdigit():	# 현재 문자가 숫자이면
                numberidx += file[i]	# NUMBER에 추가
                
        dic[file] = [headidx.upper(),int(numberidx)]	# 대소문자 구분을 없애기 위해 HEAD를 대문자로 변환한다. 숫자비교를 위해 NUMBER을 정수형으로 변환한다.
        
    for i in sorted(dic.items(), key= lambda x:(x[1][0],x[1][1])):	# value의 0번 인덱스(HEAD), 1번인덱스(NUMBER)을 기준으로 딕셔너리를 정렬한다.
        answer.append(i[0])	# key를 하나씩 answer에 추가한다.
    
    return answer
profile
쥐구멍에 볕드는 날
post-custom-banner

0개의 댓글