3단계랑 4단계에서 index error 나는거에서 진짜 더럽게 헤맸다... 처음에는 .. 이 두번 나오면 첫번째 것을 삭제하도록 아래처럼 체크를 했더니, 중간에 문자열 길이가 바뀌니까 당연히.. index error 가 났다.
# step 3
for i in range(len(answer)-1):
if answer[i] == "." and answer[i + 1] == ".":
answer.pop(i)
그래서 ..이 겹치는 부분의 첫번째 index를 저장만 해두고 나중에 pop을 했다... 에러는 안났지만 앞의 것이 삭제돼서 뒤의 index가 바뀌니까 이상한 답이 나왔다.
# step 3
indexs = []
for i in range(len(answer)-1):
if answer[i] == "." and answer[i + 1] == ".":
indexs.append(i)
for i in range(len(indexs)):
answer.pop(i);
그러면!!! indexs 배열을 뒤집어서 뒤에부터 삭제하면 되겠구나!!! 하고 코드를 짜려고보니.. 그럼 그냥 처음부터 뒤에서부터 하면 되잖아? 하고 아래와 같은 코드를 작성했다.
6단계 역시도.. 문자가 0개이거나 1개인 경우에 문제가 생겼다. 꼭 한번 다시 풀어봐야 할 문제인 것 같다... 다른 사람들 답안을 보니까 정규표현식 다들 잘 써서 푸신거같아서....... 그것도 고려해봐야겠다... 나는 C에서 짜는 방식에서 벗어날 수가 없나보다
def solution(new_id):
answer = []
# step 1
new_id = new_id.lower()
# print(answer)
# step 2
for i in range(len(new_id)):
c = new_id[i]
if c.isdecimal() or c.isalpha() or c == "-" or c == "_" or c == ".":
answer.append(c)
# print(answer)
# step 3
start = len(answer) - 1
for i in range(start, 0, -1):
if answer[i] == "." and answer[i - 1] == ".":
answer.pop(i)
# print(answer)
# step 4
if len(answer) > 1:
if answer[0] == ".":
answer.pop(0)
if answer[-1] == ".":
answer.pop()
elif len(answer) == 1:
if answer[0] == ".":
answer.pop()
# print(answer)
# step 5
if len(answer) == 0:
answer.append("a")
# print(answer)
# step 6
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == ".":
answer.pop()
# print(answer)
# step 7
last_c = answer[-1]
while len(answer) < 3:
answer += last_c
# print(answer)
answer = ''.join(str(c) for c in answer)
return answer