개발/알고리즘
[프로그래머스] 신규 아이디 추천(python)
개발자_티모
2022. 10. 3. 18:14
반응형
풀이
연속된 문자열의 깔끔한 처리
코드
"연속된 문자를 복잡하게 처리하는 코드"
def get_rule2(id):
new_id = ""
for i in range(len(id)):
if not id[i].isalpha() and not id[i].isdigit():
if not id[i] in ['.', '-', '_']:
continue
new_id += id[i]
return new_id
def get_rule3(id):
new_id = ""
end = -1
for i in range(len(id)):
if not id[i].isalpha():
if id[i] == '.':
end = i
for j in range(i + 1, len(id)):
if id[j] != '.':
break
end = j
if end <= i:
new_id += id[i]
return new_id
def solution(new_id):
answer = new_id.lower()
new_id = new_id.lower()
new_id = get_rule2(new_id)
new_id = get_rule3(new_id)
new_id = new_id.lstrip('.')
new_id = new_id.rstrip('.')
if new_id == "":
new_id = 'a'
if 16 <= len(new_id):
new_id = new_id[0:15].rstrip(".")
while len(new_id) < 3:
new_id += new_id[-1]
return new_id
if __name__ == "__main__":
solution("123_.def")
"깔끔하게 처리한 코드"
def solution(new_id):
answer = ''
# 1
new_id = new_id.lower()
# 2
for c in new_id:
if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
answer += c
# 3
while '..' in answer:
answer = answer.replace('..', '.')
# 4
if answer[0] == '.':
answer = answer[1:] if len(answer) > 1 else '.'
if answer[-1] == '.':
answer = answer[:-1]
# 5
if answer == '':
answer = 'a'
# 6
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7
while len(answer) < 3:
answer += answer[-1]
return answer
소감
이런 문제는 구현이 귀찮아 진다. 그래서 풀고나면 다른 분들의 코드를 많이 참조하면서 배운다. 이번에도 연속된 '..' 을 재미나게 처리하는 방법을 배웠다. ".." in string -> string.replace(".")은 상당한 코드인듯하다.
반응형