⌨️ Algorithms/프로그래머스 [Python] 프로그래머스 Lv1_신규 아이디 추천 2022. 10. 18. 21:04 - https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디 규칙 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. 7단계의 순차적인 처리 과정 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이 될 때까지 반복해서 끝에 붙입니다. """ 입출력 예시) new_id = "...!@BaT#*..y.abcdefghijklm" -> "bat.y.abcdefghi" new_id = "z-+.^." -> "z--" new_id = "=.=" -> "aaa" new_id = "123_.def" -> "123_.def" new_id = "abcdefghijklmn.p" -> "abcdefghijklmn" """ import re def solution(new_id): answer = '' # 1단계) new_id의 모든 대문자를 대응되는 소문자로 치환 answer = new_id.lower() # 2단계) new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거 answer = re.sub("[^a-z0-9-_.]", '', answer) # 3단계) new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 answer = re.sub("[.]{2,}", '.', answer) # 4단계) new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거 answer = re.sub("^[.]|[.]$", '', answer) # 5단계) new_id가 빈 문자열이라면, new_id에 "a"를 대입 if answer == "": answer = 'a' # 6단계) new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 if len(answer) >= 16: answer = answer[:15] # 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거 if answer[-1] == '.': answer = answer[:-1] # 7단계) new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 if len(answer) <= 2: while len(answer) < 3: answer += answer[-1] return answer 참고) https://docs.python.org/ko/3/howto/regex.html 정규식 HOWTO — Python 3.10.8 문서 대소 문자를 구분하지 않는 일치를 수행합니다; 문자 클래스와 리터럴 문자열은 대소 문자를 무시하여 문자와 일치합니다. 예를 들어 [A-Z]는 소문자와도 일치합니다. ASCII 플래그로 ASCII가 아닌 docs.python.org https://cosmosproject.tistory.com/m/180 Python re : sub re는 regular expression의 약자로 정규표현식을 의미합니다. Python의 re library에는 sub이라는 method가 있는데 이것은 어떠한 패턴을 내가 원하는 방식으로 대체해줍니다. 일반적인 replace 함수는 단지 어 cosmosproject.tistory.com https://codechacha.com/ko/python-remove-special-letters/ Python - 문자열에서 특수문자 제거, 숫자 제거, 숫자만 남기기 파이썬에서 문자열의 특수문자만 제거하거나, 숫자만 제거, 또는 숫자만 남기고 다른 문자를 제거하는 방법을 소개합니다. re.sub(pattern, replacement, string)은 string에서 정규표현식의 pattern과 일치하 codechacha.com https://velog.io/@cha-suyeon/%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%B4%EB%9E%80-%EB%AC%B8%EC%9E%90-%ED%81%B4%EB%9E%98%EC%8A%A4-Dot.-%EB%B0%98%EB%B3%B5-%EB%B0%98%EB%B3%B5-%EB%B0%98%EB%B3%B5mn [Python] 정규 표현식(1) - 문자 클래스, Dot(.), 반복(*), 반복(+), 반복({m,n}, ?) 저는 점프투파이썬 교재로 공부합니다. 이 교재를 바탕으로 공부한 걸 정리합니다.드디어 마지막 챕터까지 와서 기뻐했건만, 정규표현식을 만나고 보스를 만난 기분입니다.(제가 깨본 보스맵은 velog.io https://velog.io/@dust_potato/python-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-re-module python 정규표현식 re module 문자열 문자에 re를 써먹어보자! velog.io 공유하기 게시글 관리 MONZHELD '⌨️ Algorithms > 프로그래머스' 카테고리의 다른 글 [Python] 프로그래머스 Lv1_같은 숫자는 싫어 (0) 2022.12.14 [Python] 프로그래머스 Lv1_가장 가까운 같은 글자 (0) 2022.12.14 [Python] 프로그래머스 Lv1_실패율 (0) 2022.10.17 [Python] 프로그래머스 Lv2_주차 요금 계산 (0) 2022.10.14 [Python] 프로그래머스 Lv2_[1차] 캐시 (0) 2022.10.13 Contents 당신이 좋아할만한 콘텐츠 [Python] 프로그래머스 Lv1_같은 숫자는 싫어 2022.12.14 [Python] 프로그래머스 Lv1_가장 가까운 같은 글자 2022.12.14 [Python] 프로그래머스 Lv1_실패율 2022.10.17 [Python] 프로그래머스 Lv2_주차 요금 계산 2022.10.14 댓글 1 + 이전 댓글 더보기