문제풀이
def solution(new_id):
new_id = new_id.lower()
new_id = list(new_id)
for word in new_id[:]:
if not (('a'<= word <='z') or (word == '-') or (word == '_') or (word == '.') or ('0'<= word <='9')):
new_id.remove(word)
if len(new_id) > 0:
for idx in range(0, len(new_id)-1):
if idx >= len(new_id)-1:
break
if new_id[idx] == new_id[idx+1] and new_id[idx]== '.':
while(new_id[idx] == '.'):
del new_id[idx]
if idx > len(new_id)-1:
break
new_id.insert(idx, '.')
if len(new_id) > 0:
if new_id[-1] =='.':
del new_id[-1]
if len(new_id) > 0:
if new_id[0] =='.':
del new_id[0]
if len(new_id) == 0:
new_id.append('a')
new_id = new_id[:15]
if new_id[-1] =='.':
del new_id[-1]
last_word = new_id[-1]
while(len(new_id) < 3):
new_id.append(last_word)
new_id = ''.join(new_id)
answer = new_id
return answer
알고리즘
특별한 알고리즘이 필요한 문제는 아니다. 하지만 다른 사람 풀이 중 좋은 솔루션이 있어 거기에 활용된 sub()에 대해 알아본다.
import re 정규 표현식
후에 추가
sub 메서드
import re
<str> = re.sub(pattern, replace, string, count=0, flag=0)
정규식과 매치되면 변경 시킨다.
주어진 string 전체에서 pattern과 일치하는 모든 것을 replace로 교체하고, 결과를 str 타입으로 반환한다.
replace는 문자열이 될 수도 있고, 함수가 될 수도 있다.
count는 최대 몇 번까지 교체할 것인가를 설정하는 인자이다.
이 값이 0 이면, 모든 일치가 replace로 교체될 것이며, 0보다 크다면 그 횟수만큼만 교체될 것이다.
count는 음수로 설정할 수 없으므로, 주의해야 한다.
출처
문제: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
sub 메소드: https://wikidocs.net/82868