programmers.co.kr/learn/courses/30/lessons/17686
코딩테스트 연습 - [3차] 파일명 정렬
파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램��
programmers.co.kr
level2
1차
def solution(files):
answer = []
HEAD , TAIL= head(files)
NUMBERS = numbers(TAIL)
for i in range(1,len(files)-1):
for j in range(1,len(files)-i):
if HEAD[j-1].lower() > HEAD[j].lower():
HEAD[j-1], HEAD[j] = HEAD[j],HEAD[j-1]
NUMBERS[j-1], NUMBERS[j] = NUMBERS[j],NUMBERS[j-1]
TAIL[j-1],TAIL[j] = TAIL[j],TAIL[j-1]
for i in range(len(files)-1):
hindex = 0
index = 0
for j in range(i+1,len(files)):
if HEAD[i].lower() != HEAD[j].lower():
break
elif HEAD[i].lower() == HEAD[j].lower():
hindex = i
index = j
if index != 0:
for i in range(hindex+1, index):
for j in range(hindex+1, index-i+2):
if int(NUMBERS[j-1]) > int(NUMBERS[j]):
HEAD[j-1], HEAD[j] = HEAD[j],HEAD[j-1]
NUMBERS[j-1], NUMBERS[j] = NUMBERS[j],NUMBERS[j-1]
TAIL[j-1],TAIL[j] = TAIL[j],TAIL[j-1]
if index == len(files)-1:
break
for i in range(len(files)):
answer.append(HEAD[i] + NUMBERS[i] + TAIL[i])
return answer
def head(files):
HEAD = []
TAIL = []
for i in range(len(files)):
for j in range(len(files[i])):
if files[i][j].isdigit() == True:
HEAD.append(files[i][:j])
TAIL.append(files[i][j:])
break
return HEAD,TAIL
def numbers(TAIL):
NUMBERS = []
for i in range(len(TAIL)):
for j in range(len(TAIL[i])):
if TAIL[i][j].isdigit() == False:
NUMBERS.append(TAIL[i][:j])
TAIL[i] = TAIL[i][j:]
break
return NUMBERS
files = ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
print(solution(files))
채점 결과
정확성: 20.0
합계: 20.0 / 100.0
테케는 다 맞는데 시간 오류로 다 틀리능..버블정렬으로 했더니 넘 오래걸려서 그런가보다... 틀릴줄알았다 ㅋㅎ
질문하기 보니 sort()를 쓰는거같은데...
2차
def solution(files):
answer = []
result = []
for i in range(len(files)):
result.append(cut(files[i]))
sort = sorted(result,key = lambda x: (x[0].lower(), int(x[1])))
return [''.join(s) for s in sort]
def cut(word):
head = 0
num = 0
tail = 0
for i in range(len(word)):
if word[i].isdigit() == True:
head = word[:i]
tail = word[i:]
break
for i in range(len(tail)):
if tail[i].isdigit() == False:
num = tail[:i]
tail = tail[i:]
break
return [head,num,tail]
채점 결과
정확성: 25.0
합계: 25.0 / 100.0
3차
import re
def solution(files):
result = [re.split(r"([0-9]+)",s) for s in files]
sort = sorted(result,key = lambda x: (x[0].lower(), int(x[1])))
return [''.join(s) for s in sort]
결국 다른분들껄 참고해서 풀었다...
정규화를 쓰면 훨신 간단해지고 빨라진다..
오늘도 하나 배웠다... 정규화 공부 좀 해야겠다..
'2 > 프로그래머스' 카테고리의 다른 글
프로그래머스 연습 문제 - 예상 대진표 (0) | 2020.10.25 |
---|---|
프로그래머스 연습 문제 - 방금그곡 (0) | 2020.10.21 |
프로그래머스 연습 문제 - 소수 만들기 (0) | 2020.10.19 |
프로그래머스 연습 문제 - 튜플 (0) | 2020.10.19 |
프로그래머스 연습 문제 - 셔틀버스 (0) | 2020.10.18 |