Level 1. 신규 아이디 추천

49. 신규 아이디 추천

코딩테스트 연습 > 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천
https://programmers.co.kr/learn/courses/30/lessons/72410


문제 설명

Input value =

  • new_id = 문자열

Process =

  1. 대문자 > 소문자

  2. 소문자,숫자,'-','_','.'을 제외한 모든 문자 제거

  3. '..' 이상일 경우 '.'으로 치환

  4. '.'이 처음이나 끝에 위치한다면 제거

  5. 빈 문자열일 경우 'a' 대입

  6. 길이가 16 이상일 경우 15까지 slicing

  7. 길이가 2 이하라면, 길이가 3이 될때까지 마지막 문자 반복

Output value =

  • return 문자열

제한 사항

  • id는 길이 1 이상 1,000 이하인 문자열입니다.

  • id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.

  • id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+{]}:?,<>/ 로 한정됩니다.


풀이 구상

#00
new_id = "...!@BaT#*..y.abcdefghijklm"
answer = ''
#01
new_id = new_id.lower()
#02
for w in new_id:
    if w.isalnum() or w in '-_.':
        answer+=w
#03
while '..' in answer:
    answer = answer.replace('..','.')
#04
if answer[0] == '.' and len(answer) > 1:
    answer = answer[1:]

if answer[-1] == '.':
    answer = answer[:-1] 
#05
if answer == '':
    answer = 'a'
#06
if len(answer)>=16:
    answer = answer[:15]
    if answer[-1] == '.': # 길이를 줄였을 때 4단계 재적용 필요
        answer = answer[:-1]
elif len(answer)<=3:
    answer = answer+answer[-1]*(3-len(answer))
answer

풀이 방법

def solution(new_id):
    answer = ''
    new_id = new_id.lower()
    for w in new_id:
        if w.isalnum() or w in '-_.':
            answer+=w
    while '..' in answer:
        answer = answer.replace('..','.')
    if answer[0] == '.' and len(answer) > 1:
        answer = answer[1:]

    if answer[-1] == '.':
        answer = answer[:-1] 
    if answer == '':
        answer = 'a'
    if len(answer)>=16:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    elif len(answer)<=3:
        answer = answer+answer[-1]*(3-len(answer))
    return answer

# Code test
new_id = "...!@BaT#*..y.abcdefghijklm"
solution(new_id)

마치며

  1. 6단계에서 글자 길이에 대해 slicing 할 때, slicing 된 값이 4단계의 요건을 충족하는 지 확인을 해야 한다.


프로그래머스 Level 1. 포스팅 종료

총 49 문제의 프로그래머스 Level 1 포스팅이 끝났다...!

좋은 웹페이지 즐겨찾기