코딩테스트

[프로그래머스] 신규 아이디 추천 - Lv.1

pyflu 2023. 8. 18. 04:15

[프로그래머스] 신규 아이디 추천 Lv.1 - [파이썬/python]

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

 

문제 설명

 

 

ID를 조건에 맞게 변환하여 반환(return)하면 되는 문제입니다.

 

 

조건은 7단계로 나눠져 있습니다.

 

 

# 1단계

- ID의 모든 대문자를 소문자로 치환한다.

 

# 2단계

- ID에서 알파벳 소문자, 숫자, 빼기("-"), 밑줄("_"), 마침표(".")를 제외한 모든 문자를 제거한다.

 

# 3단계

- ID에서 마침표(".")가 2번 이상 연속된 부분을 하나의 마침표(".")로 치환한다.

 

# 4단계

- ID에서 마침표(".")가 처음이나 끝에 위치한다면 제거한다.

 

# 5단계

- ID가 빈 문자열이라면, ID에 "a"를 대입합니다.

 

# 6단계

- ID의 길이가 16자 이상이면, ID의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거한다.
- 만약 제거 후 마침표(".")가 ID의 끝에 위치한다면 끝에 위치한 마침표(".") 문자를 제거한다.

 

# 7단계

- ID의 길이가 2자 이하라면, ID의 마지막 문자를 ID의 길이가 3이 될 때까지 반복해서 끝에 붙인다.

 

 

더보기

# 1단계
- 파이썬은 [어떤 문자열 메서드]를 통해 모든 대문자를 소문자로 변환할 수 있습니다.

- [어떤 문자열 메서드]는 문자열에 특수문자가 포함되어 있어도 상관없이 사용가능합니다.

# 2단계

- 원하는 문자만 통과시키기 / 필요 없는 문자를 제거하기 / 필요 없는 문자를 빈 문자로 치환하기

 

# 3단계

- 2개의 마침표("..")가 ID안에 있는지 확인 후, 마침표(".") 치환하기

- 조건반복문을 통해 여러 번 확인해야 함

- 마침표(".")가 5개 이상 연속으로 붙어있어도 2개씩 확인하여 하나로 치환하면 결국 하나만 남음

 

# 4단계

- 문자열의 처음(ID[0])과 끝(ID[-1])에 마침표(".")가 있는지 확인 후 삭제하기

- 앞 3단계에서 연속된 마침표는 제거했으니 반복문은 사용하지 않아도 됨

 

# 5단계

- ID가 빈문자열("")인지 확인하고 "a" 대입하기

 

# 6단계

- 문자열의 길이를 확인 후, 문자열 슬라이싱을 통해 앞 15개의 문자만 넣거나 / 16번째 문자부터 잘라버리기

- 문자열 길이 조정 후 마침표(".")가 끝에 위치하면 제거하거나 / 치환하기

 

# 7단계

- 문자열의 길이를 확인 후 문자열의 끝(ID[-1]) 문자를 문자열의 길이가 3이 될 때까지 추가하기

 

 

 

 




정답 주의!!!




 

 

 

 


def solution(new_id):
   
    # 1단계
    # lower()을 통해 new_id의 대문자를 소문자로 바꾸어준다.
    new_id = new_id.lower()
   
    # 2단계
    temp = '' # 임시 값
    for i in new_id:
        # 소문자, 숫자, "-", "_", "." 만 temp에 넣기
        if i.isalpha() or i.isdigit() or i == "-" or i == "_" or i == ".":
            temp += i
    # temp를 다시 new_id에 넣기
    new_id = temp
   
    # 3단계
    # ".."가 new_id 안에 있으면 "."로 치환하기
    while ".." in new_id:
        new_id = new_id.replace("..", ".")
   
    # 4단계
    # new_id의 처음이나 끝에 "." 있을 경우 슬라이싱해서 빼버리기
    while new_id.startswith(".") or new_id.endswith("."):
        if new_id.startswith("."):
            new_id = new_id[1:]
        if new_id.endswith("."):
            new_id = new_id[:-1]
   
    # 5단계
    # new_id가 빈 문자열인 경우 "a" 추가
    if new_id == "":
        new_id += "a"
   
    # 6단계
    # new_id의 길이가 16이상이면 슬라이싱 하기
    # 슬라이싱 한 후 끝에 "."있으면 제거하기
    # 3단계에서 "."가 연속으로 있는 경우는 제거해서 반복문은 불필요
    if len(new_id) >= 16:
        new_id = new_id[:15]
       
        if new_id.endswith("."):
            new_id = new_id[:-1]
   
    # 7단계
    # new_id의 길이가 2 이하("이하"는 "~보다 작거나 같다"라는 뜻)면
    # new_id의 길이가 3이 될 때까지 new_id의 끝 문자 추가 반복하기
    while len(new_id) < 3:
        new_id = new_id + new_id[-1]
   
    return new_id

728x90