본문 바로가기
코딩테스트

신규 아이디 추천

by 느림보어른 2021. 5. 28.

문제풀이

def solution(new_id):
    
    new_id = new_id.lower()
    
    new_id = list(new_id)
    
    for word in new_id[:]:
        if not (('a'<= word <='z') or (word == '-') or (word == '_') or (word == '.') or ('0'<= word <='9')):
            new_id.remove(word)
            
    if len(new_id) > 0:
        for idx in range(0, len(new_id)-1):
            if idx >= len(new_id)-1:
                break
            if new_id[idx] == new_id[idx+1] and new_id[idx]== '.':
                while(new_id[idx] == '.'):
                    del new_id[idx]
                    if idx > len(new_id)-1:
                        break
                new_id.insert(idx, '.')
                
    if len(new_id) > 0:
        if new_id[-1] =='.':
            del new_id[-1]
    
    if len(new_id) > 0:
        if new_id[0] =='.':
            del new_id[0]
    
    
    if len(new_id) == 0:
        new_id.append('a')
    
    new_id = new_id[:15]
    
    if new_id[-1] =='.':
        del new_id[-1]
    
    last_word = new_id[-1]
    while(len(new_id) < 3):
        new_id.append(last_word)
    
    
    new_id = ''.join(new_id)
    
    answer = new_id
    return answer

알고리즘

특별한 알고리즘이 필요한 문제는 아니다. 하지만 다른 사람 풀이 중 좋은 솔루션이 있어 거기에 활용된 sub()에 대해 알아본다.

import re 정규 표현식

후에 추가

sub 메서드

import re

<str> = re.sub(pattern, replace, string, count=0, flag=0)

정규식과 매치되면 변경 시킨다.

주어진 string 전체에서 pattern과 일치하는 모든 것을 replace로 교체하고, 결과를 str 타입으로 반환한다.
replace는 문자열이 될 수도 있고, 함수가 될 수도 있다.

count는 최대 몇 번까지 교체할 것인가를 설정하는 인자이다.
이 값이 0 이면, 모든 일치가 replace로 교체될 것이며, 0보다 크다면 그 횟수만큼만 교체될 것이다.
count는 음수로 설정할 수 없으므로, 주의해야 한다.

 

출처

문제: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

sub 메소드: https://wikidocs.net/82868

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

'코딩테스트' 카테고리의 다른 글

음양 더하기  (0) 2021.05.29
소수 찾기  (0) 2021.05.28
체육복  (0) 2021.05.28
삼각 달팽이  (0) 2021.05.26
문자열 압축  (0) 2021.05.26