[PG72410] 신규 아이디 추천
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/프로그래머스

[PG72410] 신규 아이디 추천

프로그래머스

🚩 문제 설명

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

 

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

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

programmers.co.kr

1. 아이디의 길이는 3자 이상 15자 이하여야 합니다.
2. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
3. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.

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이 될 때까지 반복해서 끝에 붙입니다.
단계 입력 출력
1단계 ...!@BaT#*..y.abcdefghijklm ...!@bat#*..y.abcdefghijklm
2단계 ...!@bat#*..y.abcdefghijklm ...bat..y.abcdefghijklm
3단계 ...bat..y.abcdefghijklm .bat.y.abcdefghijklm
4단계 .bat.y.abcdefghijklm bat.y.abcdefghijklm
5단계 bat.y.abcdefghijklm bat.y.abcdefghijklm
6단계 bat.y.abcdefghijklm bat.y.abcdefghi
7단계 bat.y.abcdefghi bat.y.abcdefghi

◾ 문자열을 단계에 맞게 가공하는 문제.

◾ 문제를 풀기에 문자열 함수가 필요할 것 같다.

 

 


 

 

✅ 입출력

new_id: 가공되는 문자열
return ➡️ 단계를 거친 문자열을 반환한다.
new_id return
"...!@BaT#*..y.abcdefghijklm" "bat.y.abcdefghi"

 

 


 

 

📑 문제 풀이

with 파이썬 (Python)
import re


def solution(new_id):
    ans = new_id

    # 1. 대문자 -> 소문자
    ans = ans.lower()

    # 2. 다른 문자들 제거
    ans = re.sub("[^a-z0-9.\-_]", "", ans)

    # 3. 마침표 2번 이상 -> 한번으로
    for j in range(len(ans)):
        ans = ans.replace("..", ".")

    # 4. 마침표 처음과 끝이면 삭제
    ans = ans.strip(".")

    # 5. 빈 문자열이라면 a 대입
    if ans == "":
        ans = 'a'

    # 6. 16글자 이상 -> 첫 15글자 이외 삭제
    # 만약 마침표 끝에 있다면 삭제
    ans = ans[:15].rstrip(".")

    # 7. 길이 2자 이하 -> 마지막 문자 3이 될때까지 붙임
    if len(ans) <= 2:
        for i in range(3):
            if len(ans) >= 3:
                break
            else:
                ans = ans + ans[-1]

    print(ans, len(ans))
    return ans

💬 Point

➡️  문자열 함수 사용
➡️  lower() 영어 대문자 소문자로 변경해주기

➡️  re.sub(정규표현식, 적용될 문자열) 정규표현식 활용으로 특수문자 제거하기
➡️  replace(바꿀 문자열, 바꿔질 문자열)
➡️  strip(), rstrip() 으로 바깥쪽에 문자 제거 하기

◾ 문자열 함수를 사용해서 쉽게 풀 수 있는 문제였다.

◾ replace를 사용할 시에는 한번을 사용한다고 해서 2개 이상의 마침표가 다 사라지지 않는다.

  • 따라서 반복문을 사용해서 여러번 replace()를 사용했다.

◾ [^a-z0-9./-_]

  • ^ 는 부정을 이른다. (not)
  • a-z는 소문자 a부터 z를 이른다.
  • 0-9는 0에서 9까지 모든 아라비아 숫자를 이른다.
  • . 은 마침표
  • /- 는 - (하이폰)
  • _ 는 _ (아래 하이폰)
  • 앞에 ^이 포함되어 있으므로 위의 문자열을 제외한 모든 문자들을 제거한다.

 

 

 

 

 

 

 

 

 

 

 


 

728x90