[프로그래머스] Lv.1 신규 아이디 추천 (Python)

seulzzang·2022년 9월 12일
0

코딩테스트 연습

목록 보기
4/44

📍문제

[프로그래머스] Lv.1 신규 아이디 추천 (Python)

📍풀이

이 문제는 조건에 따라 코드 작성만 해주면 되는 문제.
.lower(), .isalpha(), .isdigit()같은 문자열에 쓰이는 메서드도 잊지말고 체크해두자.

💻코드

def solution(new_id):
    answer = ''
    # 1: 모든 대문자를 대응되는 소문자로 치환
    new_id = new_id.lower()
    # 2: 알파벳 소문자, 숫자, - _ . 제외하고 모두 제거
    # 위의 것들로만 이루어져 있지 않으면 제거
    for n in new_id:
        # 위의 것들로 이루어져 있으니까 answer에 +
        if n.isalpha() or n.isdigit() or n in ['-','_','.']:
            answer += n
    # 3: 마침표가 2번 이상 연속된 부분을 하나의 마침표로 치환
    while '..' in answer:
        answer = answer.replace('..', '.')
    # 4: 마침표가 처음이나 끝에 위치한다면 제거
    if answer[0] == '.':
        # 문자열의 길이가 2이상이라면
        if len(answer) > 1:
            answer = answer[1:]
        # 근데 아니라면 .이 남아있어야함(처음이자 마지막 문자가 될 수 있기 때문에)
        else:
            answer = '.'
    if answer[-1] == '.':
        answer = answer[:-1]
    # 5: 빈 문자열이라면 a 대입
    if answer == '':
        answer += 'a'
    # 6: 16자 이상이면, 15개의 문자를 제외한 나머지문자를 모두 제거
    if len(answer) > 15:
        answer = answer[:15]
        # 만약 제거 후 마침표가 끝에 위치한다면 끝에 위치한 마침표문자를 제거
        if answer[-1] == '.':
            answer = answer[:-1]
    # 7: new_id의 길이가 2자 이하라면, 마지막 문자를 길이가 3이 될 때 까지 반복해서 끝에 붙임
    while len(answer) < 3:
        answer += answer[-1]

    return answer

주석에 조건 참고!

중간에 시행착오가 있었는데, 4번 조건에서

if len(answer) > 1:
    answer = answer[1:]
else:
    answer = '.'

이부분이 없다면 List index Out of Range라는 에러메시지가 뜬다. 주석에 적어놨다시피 문자열 길이가 .으로 단 하나 남아있을 경우 처음이자 마지막 문자가 되기 때문에 생기는 에러. 이부분에서 한참을 헤맸다..😒 아직 이런 부분을 빨리빨리 생각해내기는 어려운 것 같다.
이 문제 풀면서 느낀점은 문제 길다고 쫄 필요가 없다는 것..

📍다른사람 풀이

import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    st = re.sub('\.+', '.', st)
    st = re.sub('^[.]|[.]$', '', st)
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

진짜 레전드풀이
프로그래머스에서 다른사람 풀이 보면 제일 위에 뜨는 풀이임!!
나는 사실 정규식 왜 배우나(ㅋㅋ;;ㅈㅅ합니다 강사님)생각했는데 이럴 때 쓰는거군🤔
사실 문제 다시 보면 제일 앞, 뒤에 포함되는지 이런거 따지는 문제라서 정규식이 바로 생각났어야 하는 것 같다. 막상 쓰려면 정규식 패턴이 생각 안나는게 문제지만..

profile
중요한 것은 꺾이지 않는 마음

0개의 댓글