주어진 문제를 해결하기위해 정규표현식을 사용할까 고민했지만 아직 정규 표현식을 잘 모르는 관계로
그냥 대가리 박아가면서 했다
def solution(new_id):
new_id = stage1(new_id)
new_id = stage2(new_id)
new_id = stage3(new_id)
new_id = stage4(new_id)
new_id = stage5(new_id)
new_id = stage6(new_id)
new_id =stage7(new_id)
return new_id
문제는 함수를 불러오는 식으로 해서 7개의 단계를 하나씩 처리했고
def stage1(new_id):
return new_id.lower()
1번째 조건인 소문자로 만들기 lower()을 이용해서 소문자로 만들었다
def stage2(new_id):
limit=['-','_','.']
result = []
for spec in new_id:
if spec.isalpha() or spec.isdigit():
result.append(spec)
elif spec in limit:
result.append(spec)
return ''.join(result)
2번째 조건은 주어진 특수기호와 숫자 알파벳만 나오게 바꾸는거로 isalpha 랑isdigit를 이용해서 알파벳과 정수 데이터인지 검증을 했고 예외인 특수문자는 리스트로 안에 값이 존재하는지 확인하고 append를 해서 2단계를 처리했다
def stage3(new_id):
if '..' in new_id:
new_id = new_id.replace('..','.')
return stage3(new_id)
else:
return new_id
3단계같은 경우에는 .이 2개 이상 연속으로 나온경우에는 .을 1개로 바꾸는건데 ..을 .으로 바꾸는걸 자기자신을 호출시켜서 ..이 2개가아니라 2개이상일경우에도 .이되게했다
def stage4(new_id):
if new_id[0]=='.':
new_id = new_id[1:]
if new_id[-1:]=='.':
new_id = new_id[:-1]
return new_id
4단계에는 인덱스의 0과 마지막이 .으로 시작할 경우에는 텍스트 슬라이싱을 이용해서 그 인덱스를 빼버렸다
def stage5(new_id):
if new_id == '' :
return 'a'
else:
return new_id
5단계에서는 이조건을 다했을시에 문자열의 길이가 0 인 경우에는 a값을 return하고 아니면 자기자신을 리턴하는 코드다
def stage6(new_id):
new_id = new_id[:15]
return stage4(new_id)
6단계에서는 텍스트슬라이싱으로 15개가 넘는 문자열을 자르고 다시한번더 4단계를 통해서 .으로 끝나는 문자열이 있나 확인을 했습니다
def stage7(new_id):
if len(new_id)<3:
new_id+=new_id[-1:]
return stage7(new_id)
else:
return new_id
마지막으로 6단계까지 했을떄 문자열의 길이가 3 보다 작을경우에 인덱스의 마지막 문자열을 문자열의 길이가 3이될떄가지 뒤에다가 붙여넣는 코드입니다
'내일배움 캠프 > TIL' 카테고리의 다른 글
2023 05 08 TIL 팀프로젝트 시작 (0) | 2023.05.09 |
---|---|
코딩테스트 체육복 (0) | 2023.05.07 |
코딩테스트 겹치는 선분의 길이 (0) | 2023.05.03 |
vue를 이용해서 게시글 띄우는 코드 바꾸기 (0) | 2023.05.02 |
fetch api를 이용해서 서버에서 데이터 가져오기 (0) | 2023.04.27 |