https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3
Solution
def solution(files):
#print(files);
answer = []
num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
tmp_result = []
for f in range(len(files)):
head, number, tail = '', '', '';
idx, num_cnt = 0, 0
for h in range(idx, len(files[f])):
if files[f][h] in num:
break
head += files[f][h]
idx += 1
#print(head)
for n in range(idx, len(files[f])):
if not files[f][n] in num:
break
if len(number) <= 5:
if files[f][n] in num:
number += files[f][n]
idx += 1
else:
break
#print(number)
if idx < len(files[f]):
for t in range(idx, len(files[f])):
if files[f][t]:
tail += files[f][t]
else:
break
#print(tail)
tmp_result.append((head.lower(), int(number), tail, f))
tmp_result = sorted(tmp_result, key = lambda x:(x[0], x[1]))
print(tmp_result)
for i in tmp_result:
answer.append(files[i[3]])
return answer
문제 유형: 문자열 / 정렬
files에 주어진 각 file들의 문자열을 앞에서부터 하나씩 검사했다. HEAD는 숫자가 아닌 문자열로만 이루어져 있으므로 첫 숫자가 나올 때 까지의 문자들을 HEAD에 넣는다. NUMBER는 0부터 9까지의 최대 5개의 숫자로 이루어져있다. 그래서 0부터 9까지의 숫자 문자열을 하나 선언 해놓고 길이가 6이 넘지 않을 때 까지 숫자인 문자열을 NUMBER에 넣었다. 마지막 TAIL에는 나머지 문자들을 다 넣으면 된다. HEAD는 대소문자를 구분하지 않으므로 소문자로, NUMBER에서 010과 10은 같은 수로 처리해야 하므로 int로 타입을 바꿔서 처리한다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 / Python / 2020 카카오 인턴십 (0) | 2020.07.10 |
---|---|
[프로그래머스] 불량 사용자 / Python / 2019 카카오 개발자 겨울 인턴십 (2) | 2020.06.26 |
[프로그래머스] 크레인 인형뽑기 게임 / Python / 2019 KAKAO 겨울 인턴십 (0) | 2020.05.12 |
[프로그래머스] 자물쇠와 열쇠 / Python / 2020 KAKAO BLIND RECRUITMENT (0) | 2020.04.21 |
[프로그래머스] 압축 / Python / 2018 KAKAO BLIND RECRUITMENT (0) | 2020.04.21 |
,