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

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

귤발자 2021. 5. 3. 21:04
728x90
반응형

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

 

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

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

programmers.co.kr

*문제 내용이 많아 생략

 

  • 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
  • 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
  • 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
  • 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
  • 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
  • 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
  • 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

 

 

문제 해설이 길어서 그렇지 요구사항대로만 코딩하면 되기때문에 많이 어려운 문제는 아니다.

효율성 테스트도 없는지라 편하게 풀면 될 것 같다.

반드시 순차적으로 프로세싱 해주는 걸 잊으면 안됨!

def solution(new_id):
    answer = new_id[:]
    answer = answer.lower() #1단계:소문자치환
    #2단계
    answer = [ c for c in answer if c in '1234567890abcdefghijklmnopqrstuvwxyz-_.']
    newans = ''
    for i, c in enumerate(answer): #3단계:마침표중복제거
        if i > 0 and c=='.' and newans[-1] == '.': pass
        else: newans += c
    answer = list(newans) #to list
    
    #4단계
    if answer[0] =='.': del answer[0]
    if answer and answer[-1]=='.': del answer[-1]
    
    
    #5단계
    if not answer: answer.append('a')
    #6단계
    if len(answer) >=16:
        del answer[15:]
        if answer[-1]=='.': del answer[-1]
    #7단계
    result = ''.join(answer)
    if len(answer)<=2: result += result[-1]*(3-len(answer))
    
    return result
728x90
반응형