[Algorithm🧬] 신규 아이디 추천

또상·2021년 11월 22일
0

Algorithm

목록 보기
3/133
post-thumbnail

문제 링크 / 풀이.py, 풀이.swift

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


profile
0년차 iOS 개발자입니다.

0개의 댓글