코딩테스트/프로그래머스

[프로그래머스] [Level 1] [2021 KAKAO BLIND RECRUITMENT] 신규 아이디 추천

박소민 2022. 3. 27. 17:54
문제) 신규 아이디 추천
 

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

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

programmers.co.kr

 

  • 내 풀이
    • → ⚠️17, 20, 21 번 에러: 뭐가 문제인지 모르겠음
def solution(new_id):
    d=["-","_","."]
    num=[str(i) for i in range(10)]
    #소문자 치환
    new_id=new_id.replace(new_id, new_id.lower())
    #나머지 기호 전부 삭제
    new_id=[id for id in new_id if id.isalpha()==True or id in num or id in d]
         
    while True:
        #연속된 마침표 하나로 치환
        new_id="".join(new_id)
        new_id=new_id.replace('..','.')
        new_id=new_id.replace('...','.')
        #양 끝 마침표 제거
        new_id=new_id.strip('.')
        
        if len(new_id)>=16: 
            #길이가 16이상이면 앞의 15개(0~14)만 남기고 제거
            new_id=new_id[:15]
            #제거 후에도 양 끝이 마침표가 아닐 경우 종료
            if new_id[0]!='.' and new_id[-1]!='.':
                if '..' not in new_id:
                    break
        else: #15개 이하인데 양 끝이 마침표가 아니고 연속된 마침표가 없을 경우 
            if '..' not in new_id:
                break
            
    while len(new_id)<=2:
        #길이가 0인 경우 'a' 추가
        if len(new_id)==0:
            new_id+='a'
        else:
            #길이가 2이하면 3이 될 때까지 맨 마지막 문자 반복
            new_id+=new_id[-1]
                
    return new_id

 

  • 다른 사람 풀이
    • .lower() 함수 : replace 사용할 필요없이 문자열에 바로 적용 가능
    • 숫자/ 알파벳인지 확인 → .isalnum()
    • 기호 리스트에 담아서 확인할 필요 없이 '-_.' 로 확인 가능
    • 단계별로 풀이

 

 

def solution(new_id):
    # 1단계
    new_id = new_id.lower()
    # 2단계
    answer = ''
    for word in new_id:
        if word.isalnum() or word in '-_.':
            answer += word
    # 3단계
    while '..' in answer:
        answer = answer.replace('..', '.')
    # 4단계
    answer = answer[1:] if answer[0] == '.' and len(answer) > 1 else answer
    answer = answer[:-1] if answer[-1] == '.' else answer
    # 5단계
    answer = 'a' if answer == '' else answer
    # 6단계
    if len(answer) >= 16:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    # 7단계
    if len(answer) <= 3:
        answer = answer + answer[-1] * (3-len(answer))
    return answer