- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

- 정답 풀이 :

re.sub()에 대해서 공부해야함!

sub(정규표현식, 대체할 문자(열), 전체 문자열)

-> 정규표현식에 맞는 녀석을 찾아서 대체할 문자(열)로 교체해준다

 

공부한 블로그

 

^ : 문자의 시작 또는 not을 의미

$ : 문자의 끝 의미

ㅣ : or 의미 

{m,n} : 문자가 m회에서 n회 반복되는 패턴 (n이 비어있으면 m부터 무한대 반복)

\ : 특수 문자를 이스케이프 하거나, 특수 시퀀스를 알린다 

 

r'[a-z0-9-_.]' : a부터 z까지, 0부터 9까지와 _ , . 을 제외한 나머지는 ' '로 대체한다 

                           a-z 0 -9로 표현하면 틀리는 테스트 있음!

 

import re

def solution(new_id):
    
    new_id = new_id.lower()
    
    new_id = re.sub(r'[^a-z0-9-_.]','',new_id)
    
    new_id = re.sub(r'\.{2,}', '.', new_id)
    
    new_id = re.sub(r'^\.|\.$', '', new_id)
    
    if len(new_id) == 0:
        new_id = 'a'
    elif len(new_id) >= 16 :
        if new_id[14] == '.':
            new_id = new_id[:14]
        else:
            new_id = new_id[:15]

    if len(new_id) <= 2:
        while len(new_id) < 3:
            new_id = new_id + new_id[-1]
    
    return new_id

 

 

-시도해본 풀이 :

에러들을 IDE에서 직접 쳐보면서 하느라 시간이 많이 걸렸던 풀이다. 

그렇다고 테스트 다 통과하지는 못했다

시작 또는 마지막에 . 가 있는 경우에는 없애는 조건이 있는데, 이것도 바로 하면 안된다

만약 아무 문자도 없는 경우에는 시작과 끝이 없기 때문에 IndexError가 난다 

 

z-.^.에서 계속 z-.^이 출력된다^^

def solution(new_id):
    answer = ''
    new_id = list(new_id)
    
    for i in range(len(new_id)):
        if 65 <= ord(new_id[i]) <= 90:
            new_id[i] = chr(ord(new_id[i]) + 32)

    first = ''
    for i in range(len(new_id)):
        if 92 <= ord(new_id[i]) <= 122 or new_id[i].isdigit() or new_id[i] == '-' or new_id[i] =='_' or new_id[i] == '.':
            first += new_id[i]
            
    letter = []
    first = first.split('.')
    for i in range(len(first)):
        if len(first[i]) != 0:
            letter.append(first[i])
            letter.append('.')  
            
    #IndexError 계속 발생함        
    if len(letter) != 0 :
        if letter[0] == '.':
            letter.pop(0)
        if letter[-1] == '.':
            letter.pop()
    else:
        letter.append("a")

    #letter에는 원소가 따로따로 있음 
    temp = ""
    for i in range(len(letter)):
        if len(letter[i] ) != 0:
            temp += letter[i]
            
    if len(temp) >= 16:
        temp = temp[0:15]
        if temp[-1] =='.':
            temp = temp[0:14]            
    elif len(temp) <= 2:
        while len(temp) < 3:
            temp += temp[-1]

    for i in range(len(temp)):
        answer += temp[i]
        
    return answer

+ Recent posts