https://programmers.co.kr/learn/courses/30/lessons/72410
def solution(new_id):
# 1단계 - 대문자 -> 소문자
new_id = new_id.lower()
# 2단계 - 특수문자 제거
answer = ''
for chr in new_id:
if chr.isalnum() or chr in '-_.':
answer += chr
# 3단계 - .가 2번 이상 연속된 부분을 하나의 마침표로 치환
while '..' in answer:
answer = answer.replace('..', '.')
# 4단계 - .가 처음이나 끝에 위치한다면 제거
if answer[0] == '.':
answer = answer[1:]
if answer and answer[-1] == '.':
answer = answer[:-1]
# 5단계 - 빈 문자열이면 a를 대입
if not answer:
answer = 'a'
# 6단계 - 길이가 16자 이상이면 첫 15개 문자를 제외하고 나머지 모두 제거
if len(answer) >= 16:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7단계 - 길이가 2자 이하라면 new_id 의 마지막 문자를 new_id의 길이가 3일 때까지 반복해서 끝에 붙이기
while len(answer) <= 2:
answer += answer[-1]
return answer
단계별로 착실하게 구현하면 되는 문제였다.
주의할 점이라면 4단계 구현 시 경우에 따라 out of range 를 만날 수도 있다는 점이다.
테스트케이스 3번 =.=
를 4단계 수행하고 나면 빈 문자열이 되므로, answer[-1]
은 검사할 수 없기 때문이다. 빈 문자열이 아닌 경우에만 -1 인덱스에 접근하도록 수정해주면 된다.
또 하나, 6단계 구현 시에도 주의해야 할 점이 있다.
테스트케이스 6번에서 abcdefghijklmn.p
가 주어지는데, 6단계를 수행하면서 abcdefghijklmn.
가 된다. 이 때 마지막 문자열이 .
일 경우를 처리해주지 않으면 틀린다.