알고리즘/프로그래머스
[프로그래머스] 파이썬 _ 파일명 정렬 (2018 KAKAO)
이숭간
2021. 8. 21. 15:15
728x90
https://programmers.co.kr/learn/courses/30/lessons/17686
문제유형 : 문자열구현
문제풀이 :
- head, number, tail로 분리하기
- sorted의 lambda로 다중정렬기준 주기
- 비교시에 head의경우 대소문자 구분없는것으로 비교하고 출력때는 원래것, number도 마찬가지로 비교는 숫자로 바꿔서 비교하고 출력할때는 다시 원래것(문자열)로 해야하기때문에 튜플로 묶어서 저장한다.
- 비교시에는 튜플의 1번쨰 원소를 기준으로 비교하고 정렬된후 출력에는 튜플의 0번째 원소를 출력하도록 한다.
정답코드 :
def solution(files):
answer = []
info = []
for f in files:
h, n, f = seperate(f)
info.append([(h, h.lower()),(n, int(n)),f])
# 비교하는부분 - 비교시에는 소문자로 바꾼값을 기준으로 정렬, 정수값을 기준으로 정렬 (튜플의 1번쨰 원소)
info = sorted(info, key=lambda x:(x[0][1], x[1][1]))
print(info)
for i in info:
temp = ''
for j in range(len(i)):
if j!=2:
temp += i[j][0]
else:
temp += i[j]
answer.append(temp)
return answer
def seperate(fileName):
head = getHead(fileName)
h = len(head)
number = getNumber(fileName[h:])
n = len(number)
tail = fileName[n+h:]
print(tail)
return head, number, tail
def getHead(string):
head = ''
for s in string:
if not s.isdigit():
head += s
else:
return head
def getNumber(string):
num = ''
for s in string:
if s.isdigit():
num += s
else:
return num
else:
return num