Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- VirtualTryON
- visiontransformer
- masactrl
- magdiff
- diffusion
- segmenation map generation
- 코딩테스트
- controlnext
- 3d generation
- 3d editing
- Programmers
- diffusion model
- score distillation
- DP
- image editing
- 네이버 부스트캠프 ai tech 6기
- diffusion models
- 논문리뷰
- segmentation map
- video generation
- BOJ
- transformer
- video editing
- dreammotion
- Vit
- 프로그래머스
- 코테
- Python
- controllable video generation
- emerdiff
Archives
- Today
- Total
평범한 필기장
[Programmers_Python] 파일명 정렬 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17686
내 풀이방식
처음에 re.findall()를 몰라서 이용하지 않고 풀었다. re.findall()을 모르니 문이렇게 하다보니 테스트케이스에 대해서는 맞았지만 채점을 해보니 런타임 에러가 발생했다. 아래 코드를 보면 엄청 복잡하고 틀린부분도 있었다. 그래서 다른 분들의 블로그를 참고해보니 다들 re.findall() 함수를 이용한 것을 확인했고 다시 풀 때 이 함수를 이용해서 풀었다.
def solution(files):
dic = dict()
for file in files:
a = 0
b = len(file)-1
for i in range(len(file)-1):
if (48 > ord(file[i]) or ord(file[i]) > 57) and 48 <= ord(file[i+1]) <= 57:
a = i
break
for j in range(a+1, len(file)):
if 48 > ord(file[j]) or ord(file[j]) > 57:
b = j
break
if b == len(file)-1:
dic[file[:b]] = (file[:a+1].lower(),int(file[a+1:b]))
else:
dic[file[:b]] = (file[:a+1].lower(),int(file[a+1:b]),file[b:])
items = dic.items()
items = sorted(items,key = lambda x : x[1][1])
# print(items)
items = sorted(items,key = lambda x : x[1][0])
# print(items)
answer = []
for i in range(len(items)):
if len(items[i][1]) == 3:
a = items[i][0] + items[i][1][2]
answer.append(a)
else:
a = items[i][0]
answer.append(a)
return answer
정답 풀이 방식
re.findall() 함수를 이용하니 HEAD, NUMBER, TAIL을 나누기가 훨씬 간단했다. 그리고 정렬을 할 때, HEAD를 정렬시키고 NUMBER를 정렬시켜야해서 나는 두번에 나눠서 정렬을 시행했지만 한번에 하니까 훨씬 코드가 깔끔해 졌다.
import re
def solution(files):
answer = []
# HEAD, NUMBER, TAIL을 나누는 부분
for file in files:
answer.append(re.findall("[a-z|A-Z|\-|\.| ]+|[0-9]+",file))
# HEAD를 사전 방식으로 정렬하고, NUMBER를 숫자 크기 순으로 정렬!
answer.sort(key = lambda x : (x[0].upper(),int(x[1])))
answer = [''.join(a) for a in answer]
return answer
이번 문제를 풀어보고 정규 표현식 이용하는 것이 아직 많이 부족하다는 것을 깨달았다. 정규 표현식도 종종 봐야겠다.
'코딩 테스트 준비 > Programmers' 카테고리의 다른 글
[Programmers_Python] 구명보트 (0) | 2023.06.24 |
---|---|
[Programmers_Python] 다음 큰 숫자 (0) | 2023.06.22 |
[Programmers_Python] 단어 변환 (0) | 2023.06.19 |
[Programmers_Python] 등굣길 (0) | 2023.06.14 |
[Programmers_Python] 큰 수 만들기 (0) | 2023.05.08 |