[Algorithm] 프로그래머스 72410 : 신규 아이디 추천

채멈·2024년 1월 2일

Algorithm

목록 보기
2/24
post-thumbnail

문제
https://school.programmers.co.kr/learn/courses/30/lessons/72410
풀이
https://github.com/nowChae/algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/72410.%E2%80%85%EC%8B%A0%EA%B7%9C%E2%80%85%EC%95%84%EC%9D%B4%EB%94%94%E2%80%85%EC%B6%94%EC%B2%9C/%EC%8B%A0%EA%B7%9C%E2%80%85%EC%95%84%EC%9D%B4%EB%94%94%E2%80%85%EC%B6%94%EC%B2%9C.py


주어진 문자열에 대하여 순서대로 작업을 처리하는 구현 문제였다. 정해진 스텝별로 하는 동작이 정해져 있었기에 각 스텝 별 함수를 구현해주었다.

letter 함수에서는 . , -, _ , 숫자, 영어 소문자가 아닌 경우엔 넘어가도록 하기 위해서 아스키코드를 사용하였는데 이때 ord() 메소드를 이용해 구현해주었다. ord()를 사용하지 않고 코드를 작성하는 법을 다른 사람들의 코드를 알게 되면서 코딩테스트를 위해 자주 사용되는 라이브러리나 메소드를 정리해두고 익숙해져야겠다는 생각이 들었다.

또한 정규식을 통해 푼 풀이를 보았는데, 문자열에 대해 규칙을 찾아 변환하는 문제였으므로 이렇게 긴 코드를 단 몇 줄로 표현하는 것을 보고 정규식에 대해서도 알아보면 좋을 것 같다는 생각을 했다.

< 풀이 코드 >

def letter(word):
    result = ''
    for w in word:
        o = ord(w)
        if o == 45 or o == 46 or o == 95:
            result += w
        elif 48 <= o and o <= 57:
            result += w
        elif 97 <= o and o <= 122:
            result += w
    return result
        
def countDot(word):
    result = ''
    for w in word:
        if w == '.':
            if len(result) == 0:
                result += w
                continue
            elif result[-1] == '.':
                continue
        result += w
    return result

def firstLastDot(word):
    while word[0] == '.' or word[-1] == '.':
        if len(word) == 1:
            word = ''
            break
        if word[0] == '.':
            word = word[1:]
        if word[-1] == '.':
            word = word[0:len(word)-1]
    return ''.join(word)

def emptyString(word):
    if len(word) == 0:
        word = "a"
    return word

def lengthLonger(word):
    if len(word) >= 16:
        word = word[0:15]
    if word[-1] == '.':
        word = word[0:14]
    return word

def lengthShorter(word):
    last = word[-1]
    while len(word) <= 2:
        word += last
    return word

def solution(new_id):
    #1단계
    new_id = new_id.lower()
    #2단계
    new_id = letter(new_id)
    #3단계
    new_id = countDot(new_id)
    #4단계
    new_id = firstLastDot(new_id)
    #5단계
    new_id = emptyString(new_id)
    #6단계
    new_id = lengthLonger(new_id)
    #7단계 
    new_id = lengthShorter(new_id)
    
    #print(new_id)
    answer = new_id
    return answer
profile
공부 기록 차곡차곡 ( ੭ ・ᴗ・ )੭

1개의 댓글

comment-user-thumbnail
2024년 1월 3일

letter!~

답글 달기