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