728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3
최종 코드
def solution(files):
answer = []
filenames = []
for idx, file in enumerate(files):
head = ""
for i in range(len(file)):
if file[i].isdigit():
break
head += file[i]
number = ""
for j in range(i, len(file)):
if file[j].isdigit():
number += file[j]
else: break
number = number.lstrip('0')
filenames.append([idx, head.lower(), int(number) if len(number) > 0 else 0])
filenames.sort(key = lambda x:(x[1], x[2], x[0]))
for file in filenames:
answer.append(files[file[0]])
return answer
풀이 과정
풀이 시간 45분
def solution(files):
answer = []
#filenames[i] = [files의 idx, HEAD, NUMBER]
filenames = []
for idx, file in enumerate(files):
#HEAD 구하기
head = ""
for i in range(len(file)):
if file[i].isdigit():
break
head += file[i]
#NUMBER 구하기
number = ""
for j in range(i, len(file)):
if file[j].isdigit():
number += file[j]
else: break
#왼쪽에 0이 있는 경우, 제거
number = number.lstrip('0')
#filenames에 추가하기
#만약, NUMBER가 '0', '00', '000', '0000', '00000'인 경우 lstrip('0')으로 인해 ''이므로, 예외처리
filenames.append([idx, head.lower(), int(number) if len(number) > 0 else 0])
#HEAD를 기준으로 오름차순 정렬, NUMBER를 기준으로 오름차순 정렬, 입력 순서를 기준으로 오름차순 정렬
filenames.sort(key = lambda x:(x[1], x[2], x[0]))
for file in filenames:
answer.append(files[file[0]])
return answer
#시간복잡도 = O(nlog n), 공간복잡도 = O(n)
참고
- 1. N진수 게임 - 2022.03.30 - [코테 노트/프로그래머스] - Level 2 [3차] n진수 게임 <2018 KAKAO BLIND RECRUITMENT> Python 3
- 5. 자동완성
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 매칭 점수 <2019 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.04.01 |
---|---|
Level 2 [3차] n진수 게임 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.30 |
Level 2 [3차] 압축 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.28 |
Level 2 [3차] 방금그곡 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.25 |
Level 3 풍선 터트리기 Python 3 (0) | 2022.03.23 |