- Reference
- 이 문제는 어려웠지만 그대로 대부분은 나 스스로 혼자 풀 수 있었다.
- 테스트 케이스 몇 개에서 런타임 에러가 나서 왜지.. 했는데 그냥 조건 하나 땜에 그랬던 거였다.
- TAIL 구하는 메서드에서 아래의 예외처리를 내 멋대로 해서 에러 발생했던 거였다.
- 그냥 제거해줬더니 정상적으로 잘 통과됐다.
# TAIL에 빈 문자열이 담기는 예외 처리
if len(head_list[i]) + len(number_list[i]) == len(files[i]):
break
Solution
def solution(files):
tmp_answer = []
# HEAD 구하자
head_list = []
for file in files:
HEAD = ''
for f in file:
if f.isdigit():
break
else:
HEAD += f
# 아래처럼 한번에 하려 했는데 실패 그냥 따로따로 하기로 함
# HEAD = ''
# NUMBER = ''
# HEAD_checked = False
# NUMBER_checked = False
# for f in file:
# if HEAD_checked is False:
# if f.isdigit():
# HEAD_checked = True
# else:
# HEAD += f
#
# if NUMBER_checked is False:
# if f.isdigit() is False:
# NUMBER_checked = True
# else:
# NUMBER += f
head_list.append(HEAD)
# NUMBER 구하자
number_list = []
for i in range(len(files)):
NUMBER = ''
# 위에서 구해준 그 head_list의 마지막 문자 다음부터 해야지
for j in range(len(head_list[i]), len(files[i])):
if files[i][j].isdigit() is False:
break
else:
NUMBER += files[i][j]
number_list.append(NUMBER)
# TAIL 구하자
tail_list = []
for i in range(len(files)):
TAIL = ''
# 위에서 구해준 head_list와 number_list의 size를 다 더한 것부터 시작해야지
for j in range(len(head_list[i]) + len(number_list[i]), len(files[i])):
TAIL += files[i][j]
tail_list.append(TAIL)
# (HEAD, NUMBER, TAIL)을 갖고 있는 튜플 2차원 리스트를 생성하자
tuple_list = []
for i in range(len(head_list)):
my_tuple = (head_list[i], number_list[i], tail_list[i])
tuple_list.append(my_tuple)
# 각 HEAD를 기준으로 정렬하고 싶은데
tmp_answer = sorted(tuple_list, key=lambda x: (x[0].upper(), int(x[1])))
answer = []
for i in range(len(tmp_answer)):
answer.append(tmp_answer[i][0] + tmp_answer[i][1] + tmp_answer[i][2])
return answer
# 출력: ["img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"]
print(solution(["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]))
Leave a comment