say repository

[프로그래머스] 신규 아이디 추천 python 본문

알고리즘 문제 풀이/프로그래머스

[프로그래머스] 신규 아이디 추천 python

부끄러엇피치 2022. 3. 22. 15:31
728x90

https://programmers.co.kr/learn/courses/30/lessons/72410

출처 : 프로그래머스

 

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

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

programmers.co.kr

def solution(new_id):
    answer = ''
    # 1단계 모든 대문자를 소문자로
    new_id = new_id.lower()
    id_must = ['-','_','.']

    # 2단계 알파벳 소문자, 숫자, 필요한 기호 빼고 삭제
    for i in new_id:
        if i in id_must or i.isalpha() or i.isdigit():
            answer += i

    # 3단계 연속된 . 하나의 .로
    cnt = 0
    for i in answer:
        if i == id_must[2]:
            cnt += 1
            if cnt == 2:
                answer = answer.replace("..", ".")
                cnt = 0

    # 4단계 .가 처음이나 마지막이면 제거
    if answer[0] == id_must[2]: # 처음
        if len(answer)>1: # 지울게 있어야 지움
            answer = answer[1:]
        else:
            answer = '.'
            
    if answer[-1] == id_must[2]: # 마지막
        answer = answer[:-1]

    # 5단계 빈 문자열이라면 a삽입
    if answer == "":
        answer += 'a'

    # 6단계 아이디 길이가 16자리 이상이면, 첫 15개 제외한 나머지 문자 제거
    if len(answer) >= 16:
        answer = answer.replace(answer[15:],"")
        if answer[-1] == id_must[2]: # 제거 후 마지막에 .이 있다면 제거
            answer = answer[:-1]

    # 7단계 아이디 길이가 2자 이하면 마지막 문자를 길이가 3될 떄까지 반복
    while len(answer) < 3:
        answer += answer[-1]
    # print(answer)
    return answer

풀이

문자열 단계별 구현만 해주면 된다.

 

참고로 3단계는 이렇게 while 문으로도 가능하다.

while '..' in answer:
        answer = answer.replace('..', '.')

정규식으로 푸는 방법도 존재한다.