https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=python3
위에 주어진 조건을 반복하며 문자열을 리턴하는 문제이다.
def solution(new_id):
answer = ''
# 소문자
answer = new_id.lower()
# 특수문자 제거
a = ''
for i in answer:
if i.isalnum() or i in ['-','_','.']:
a += i
# 점 중복 제거
b = ''
for i in range(len(a)):
if i == 0:
b += a[i]
elif a[i] == '.':
if a[i] != b[-1]:
b += a[i]
else:
b += a[i]
# 첫번째와 마지막 . 제거
if len(b) > 0 and b[0] == '.':
b = b[1:]
if len(b) > 0 and b[-1] == '.':
b = b[:-1]
# 비어잇으면 'a'삽입
if b == '':
b = 'aaa'
# 16자 이상이면
if len(b) >= 16:
b = b[0:15]
while b[-1] == '.':
b = b[:-1]
# 2자 이하라면
if len(b) < 3:
leng = 3 - len(b)
b = b + b[-1] * leng
return b
개인적으로 문제는 쉬웠다.
제한시간도 넉넉해서 별다른 생각없이 풀 수 있었지만 코드가 좀 더러워졌다.
def change_new_id(new_id):
new_id = new_id.lower()
new_id = "".join(c for c in new_id if c.isalnum() or c in ['_', '-', '.'])
new_id = "".join([new_id[i] for i in range(len(new_id)) if i == 0 or new_id[i] != '.' or new_id[i - 1] != '.'])
if len(new_id) > 0 and new_id[0] == '.':
new_id = new_id[1:]
if len(new_id) > 0 and new_id[-1] == '.':
new_id = new_id[:-1]
if len(new_id) == 0:
new_id = "a"
if len(new_id) >= 16:
new_id = new_id[:15]
if new_id[-1] == '.':
new_id = new_id[:-1]
while len(new_id) <= 2:
new_id += new_id[-1]
return new_id
깔끔하게 가지치기한 코드이다.
'알고리즘' 카테고리의 다른 글
프로그래머스)제일 작은 수 제거하기 (0) | 2023.02.10 |
---|---|
*프로그래머스) 삼각 달팽이-python (0) | 2023.02.10 |
프로그래머스)[3차] 파일명 정렬 (0) | 2023.02.09 |
프로그래머스)두 정수 사이의 합-python (0) | 2023.02.08 |
React)경고- react_devtools_backend.js:4012 Warning: You provided a `checked` prop to a form field without an `onChange` handler. (0) | 2023.02.07 |