Notice
Recent Posts
Recent Comments
Link
유자차의 재테크 공부방
[프로그래머스] 신규 아이디 추천 본문
반응형
문자열 안에서 작업을 할 때, 정규식을 사용하는 것이 편합니다.
하지만 먼저 정규식을 사용하지 않고 풀어보았습니다.
< 알고 있으면 편한 function >
문자열.lower() : 대문자를 소문자로 치환
문자열.replace(a, b) : 문자열 안에서 a를 b로 치환
re.sub(패턴, a, 문자열) : 문자열에서 패턴과 동일한 것을 a로 치환
< 풀이 방법 >
방법 1 : 정규식 X
def solution(new_id):
# 대문자 -> 소문자
new_id = new_id.lower()
# 소문자, 숫자, -, _, . 제외 모든 문자 삭제
del_char = list("~!@#$%^&*()=+[{]}:?,<>/")
ans = ""
for i in new_id:
if i not in del_char:
ans += i
# . 두 번이상 연속 -> . 한개로
while ".." in ans:
ans = ans.replace("..", ".")
# .가 처음 또는 마지막이면 제거
if ans[0] == ".":
if len(ans) >= 2:
ans = ans[1:]
else:
ans = ""
if (len(ans) > 0) and (ans[-1] == "."):
if len(ans) >=2:
ans = ans[:-1]
else:
ans = ""
# 빈 문자열이면 a로 치환
if ans == "":
ans = "a"
# 16자 이상 -> 앞에서 15자, 마지막에 .이면 . 삭제
if len(ans) >= 16:
ans = ans[:15]
if ans[-1] == ".":
ans = ans[:-1]
# 2자 이하 -> 총 길이가 3이 될 때까지 마지막 문자 반복
while len(ans) < 3:
ans += ans[-1]
return ans
방법 2 : 정규식 O
import re
def solution(new_id):
# 대문자 -> 소문자
ans = new_id.lower()
# 소문자, 숫자, -, _, . 제외 모든 문자 삭제
ans = re.sub("[^a-z0-9\.\-\_]", "", ans)
# . 두 번이상 연속 -> . 한개로
ans = re.sub("[.]+", ".", ans)
# .가 처음 또는 마지막이면 제거
ans = re.sub("^[.]|[.]$", "", ans)
# 빈 문자열이면 a로 치환
if len(ans) == 0:
ans = 'a'
# 16자 이상 -> 앞에서 15자, 마지막에 .이면 . 삭제
if len(ans) >= 16:
ans = ans[:15]
if ans[-1] == ".":
ans = ans[:-1]
# 2자 이하 -> 총 길이가 3이 될 때까지 마지막 문자 반복
while len(ans) < 3:
ans += ans[-1]
return ans
반응형
'파이썬 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2022.03.05 |
---|---|
[프로그래머스] 키패드 누르기 (0) | 2022.03.04 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.03.01 |
[프로그래머스 : Python3]로또의 최고 순위와 최저 순위 (0) | 2022.02.22 |
[프로그래머스 : python3] 신고 결과 받기 (0) | 2022.02.21 |
Comments