import re
def solution(new_id):
id = new_id
# lv1
id = id.lower()
# lv2
id = re.sub('[^a-zA-Z0-9_\-\_\.]', '', id)
# lv3
while '..' in id:
id = id.replace('..', '.')
# lv4
if id.startswith('.'):
id = id[1:]
if id.endswith('.'):
id = id[:-1]
# lv5
if len(id) == 0:
id = 'a'
# lv6
if len(id) >= 16:
id = id[:15]
while id[-1] == '.':
id = id[:-1]
# lv7
if len(id) <= 2:
while len(id) < 3:
id += id[-1]
return id
지문에 나와있는대로 짰어요..와 같은 말보단..70%의 내 힘과 30%의 모두의 힘을 합쳐서 짰습니다..
한 3번은 파이썬으로 풀고 1번은 자바로 푼 문제이다.
2단계 규칙은 정규 표현식만 알면 정말 뚝딱뚝딱 되기 때문에 꼭..기억해두고 싶다.
3단계 규칙은 마침표(.)가 연속으로 2번 이상 있으면, 마침표(.) 1개로 치환하기였는데 위와 같이 잤다.
# lv3
while '..' in id:
id = id.replace('..', '.')
내가 처음부터 저리 짠 건 아니고.. 누가 저렇게 잤는데 while '..' in id 와 같은 문법을 보고 박수 치며 머릿 속에 넣어놨는데 잘 들어갔는지 또 푸니까 저절로 아 이거 써야지 싶었다..
4단계 규칙은 첫번째나 마지막에 마침표(.)가 들어가면 없애라는 것이었다.
# lv4
if id.startswith('.'):
id = id[1:]
if id.endswith('.'):
id = id[:-1]
id가 empty할 지 아닐지 모르는 상태에서 id의 index에 접근하면 다음과 같은 에러가 날 수 있다.
IndexError: string index out of range
그렇지만 startswith와 endswith는 없으면 False를 반환함으로 empty한 지 아닌지를 검사할 필요없이 그냥 쓰면 된다.