프로그래머스 | 2021 KAKAO BLIND RECRUITMENT | 신규 아이디 추천 [파이썬 python]

2023. 4. 27. 18:06·Algorithm/프로그래머스
 

프로그래머스

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

programmers.co.kr

 

코드

def solution(new_id):
    # 1단계: 소문자로 치환
    new_id = new_id.lower()
    
    # 2단계: 특수문자 제거
    for i in new_id: 
        if i in '~!@#$%^&*()=+[{]}:?,<>/':
            new_id = new_id.replace(i, '')
    
    # 3단계 ..., ..을 .으로 치환
    while '..' in new_id:
        new_id = new_id.replace('..', '.')
    
    # 4단계: 처음 또는 끝에 위치한 . 제거
    new_id = new_id.strip('.')

    # 5단계: 빈 문자열이면 'a' 추가
    if len(new_id) == 0: new_id += 'a'
    
    # 6단계: 16자 이상이면 15자 이후의 문자 모두 제거
    if len(new_id) >= 16:
        new_id = new_id[:15]
        new_id = new_id.rstrip('.') # 15자 이후 문자 제거 후 .이 끝에 위치하면 . 제거
    
    # 7단게: 2자 이하이면 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙임
    if len(new_id) <= 2:
        while(len(new_id) <= 2):
            new_id += new_id[-1]

    return new_id

문제가 길면 갑자기 난독증이 생기는 나도 주어진 단계를 차근차근히 따라가며 어렵지 않게 풀 수 있는 문제였다.

7단계의 가이드 중 2, 3단계를 어떻게 푸느냐가 핵심인 것처럼 느껴졌다.

정규표현식이 익숙하지 않아 최대한 아는 선에서 해결해보려 했지만 3단계에서 좌절을 느끼고 있었다.

마침표(.)가 2개 이상 존재하는 경우에 모두 1개로 바꿔줘야 하는데 어떻게 2개 이상인지 알 수 있을까 하다가 생각이 떠올랐다.

만약, ...과 같이 마침표가 3개인 경우에 ..을 .으로 바꾸면 어떻게 될까?

...은 ..이 될 것이고, 그럼 다시 ..을 .으로 바꾸면 된다.

마침표가 4개인 ....이면 ..이 될 거고 다시 ..을 .으로 바꾸면 된다.

while문을 사용해 아이디에 ..이 존재하면 .으로 바꿔주는 것을 반복하면 되는 것이었다.

 

3단계를 정규표현식으로 나타내면 다음과 같이 나타낼 수 있다.

new_id = re.sub('\.+','.', new_id)

일단 마침표가 1개 이상이면 모두 마침표 1개로 바꾸는 것으로 한다. 그럼 1개 이상을 의미하는 +를 사용하면 된다.

하지만 정규표현식에서 .은 모든 문자를 의미한다. 그럼 어떻게 우리가 의도하는 마침표를 의미하게 할 수 있을까?

\.과 같이 역슬래시(\)를 앞에 써주거나 [.]처럼 대괄호 안에 넣어주면 된다.

 

 

저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 대충 만든 자판 [파이썬 python]
  • 프로그래머스 | 공원 산책 [파이썬 python]
  • 프로그래머스 | 2022 KAKAO TECH INTERNSHIP | 성격 유형 검사 [파이썬 python]
  • 프로그래머스 | 달리기 경주 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (46)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 2021 KAKAO BLIND RECRUITMENT | 신규 아이디 추천 [파이썬 python]
상단으로

티스토리툴바