티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/72410?language=python3 

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

코드

def solution(new_id):
    answer = 0
    # 1
    new_id = new_id.lower()
    new_id_list = list(new_id)
    #print(ord('.')) # a~z : 97 ~ 122
                    # 0~9 : 48 ~ 57, - : 45, _ : 95, . : 46
    delete = []
    # 2
    for i in range(len(new_id_list)):
        if 97 <= ord(new_id_list[i]) <= 122 or 48 <= ord(new_id_list[i]) <= 57 or 45 <= ord(new_id_list[i]) <= 46 or ord(new_id_list[i]) == 95:
            continue
        else:
            delete.append(new_id_list[i])
    
    for i in delete:
        new_id_list.remove(i)
    
    # 3
    comma = []
    leng = len(new_id_list)
    for i in range(leng-1):
        count = 1
        if new_id_list[i] == '.':
            if new_id_list[i+1] == '.':
                comma.append(i)
    print(comma)
    cnt = 0
    for i in comma:
        new_id_list.pop(i-cnt)
        cnt += 1
    
    # 4
    if new_id_list[0] == '.':
        new_id_list.pop(0)
    if len(new_id_list) == 0:
        new_id_list.append('a')
    if new_id_list[-1] == '.':
        new_id_list.pop()
    # 5    
    if len(new_id_list) == 0:
        new_id_list.append('a')
        
    # 6
    if len(new_id_list) >= 16:
        new_id_list = new_id_list[0:15]
    if new_id_list[-1] == '.':
        new_id_list.pop(-1)
        
    # 7
    while len(new_id_list) <= 2:
        new_id_list.append(new_id_list[-1])
        
    return "".join(new_id_list)

파이썬 리스트 인덱스로 요소 삭제시 for문 돌면서 바로 삭제하면 인덱스 에러가 뜸

새로 리스트 만들어서 인덱스 저장후 따로 for문 돌려서 삭제

인덱스 삭제시 기존 삭제하려는 인덱스와 달라질 수 있으므로 변수 cnt 추가하여 인덱스 제어해줬다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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