코딩테스트/🕊️프로그래머스

LEVEL 1. 신규 아이디 추천

@soohh 2022. 9. 30. 12:33

 

🟪 나의 구현 스케치

각 단계에 맞게 코드를 구현했다. 하지만 string out of range 오류가 발생했고 각 단계를 확인한 결과 4단계에서 빈 배열인 경우 범위를 벗어난다. 따라서 len(new_id) > 0 조건을 추가한다. 

 

🟪 나의 구현 코드

def solution(new_id):
    answer = ''
    #1단계
    new_id = new_id.lower()
    #2단계
    for str in new_id:
        if str.isalpha() or str.isdigit():
            continue
        elif str in "-_.":
            continue
        else:
            new_id = new_id.replace(str, "")
    #3단계
    while '..' in new_id:
        new_id = new_id.replace("..", ".")
    #4단계
    if len(new_id) > 0 and new_id[0] == ".":
        new_id = new_id[1:]
    if len(new_id) > 0 and new_id[-1] == ".":
        new_id = new_id[:-1]
    #5단계
    if not new_id:
        new_id += "a"
    #6단계
    if len(new_id) >= 16:
        new_id = new_id[0:15]
        if new_id[-1] == ".":
            new_id = new_id[0:14]
    #7단계
    while len(new_id) < 3:
        new_id += new_id[-1]
    return new_id

 

🟪 다른 사람의 구현 코드

정규식으로 구현하는 방법이다. 정규식 사용법을 알아두면 좋을 것 같다.

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

https://sooh-official.tistory.com/150

 

크롤링을 위한 지식

1. 자주 사용되는 파이썬 문자열 함수 정리 - count() : 문자열에 있는 특정 문자 갯수 세기 - index() : 문자열에 있는 특정 문자의 첫 위치를 알려줌, 없는 문자면 error 발생함 - find() : 문자열에 있는

sooh-official.tistory.com

 

https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr