
주어진 문제를 해결하기위해 정규표현식을 사용할까 고민했지만 아직 정규 표현식을 잘 모르는 관계로
그냥 대가리 박아가면서 했다
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_id3단계같은 경우에는 .이 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_id4단계에는 인덱스의 0과 마지막이 .으로 시작할 경우에는 텍스트 슬라이싱을 이용해서 그 인덱스를 빼버렸다
def stage5(new_id):
    if new_id == '' :
        return 'a'
    else:
        return new_id5단계에서는 이조건을 다했을시에 문자열의 길이가 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 | 
 
			
			 
				
			
댓글