반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

프로그래머스) 신규 아이디 추천 본문

코딩 테스트(Python)/백준, 프로그래머스

프로그래머스) 신규 아이디 추천

5_hyun 2022. 3. 25. 21:25
반응형

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

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

내 풀이(맞음)

def solution(new_id):
    from collections import deque
    answer = ''
    new_id = list(new_id.lower())
    rst = deque()
    i = 0
    count = 0
    for i in range(len(new_id)):
        if (97 <= ord(new_id[i]) <= 122) or (48 <= ord(new_id[i]) <= 57)or new_id[i] == '-' or new_id[i] == '_':
            rst.append(new_id[i])
            count = 0
        elif new_id[i] == '.':
            count += 1
            if count > 1:
                count -= 0
                continue
            else:
                rst.append(new_id[i])
    if rst: 
        while len(rst) > 0:
            if rst[0] == '.':
                rst.popleft()
            elif rst[-1] == '.':
                rst.pop()
            else:
                break
    if len(rst) > 15:
        for i in range(15):
            if i == 14 and rst[i] == '.':
                break
            answer += rst[i]
    elif len(rst) <= 2:
        if rst:
            t = rst[-1]
        else:
            t = 'a'
        for i in rst:
            answer += i
        while len(answer) < 3:
            answer += t
    else:
        for i in rst:
            answer += i
    return answer

덱을 활용했다. 1단계는 lower() 함수로 해결을 했고, 2단계는 아스키 코드로 해결을 했고, 3단계는 count로 개수를 체크하여 해결했다. 4단계는 덱의 특성을 이용해 처음과 끝이 '.'이면 아닐때 까지 삭제를 해줬다. 5단계는 15개 이상이면 15개까지 answer에 넣어주고 만약 rst의 마지막이 '.'이면 break로 끝내줬다. 그리고 2개 이하면 rst가 있는 경우 t = rst의 마지막 문자이고 rst가 없으면 t는 'a'이다. 그래서 answer가 3이 될 때 까지 추가해줬다. 다른 경우에 대해서는 그냥 answer에 rst를 추가했다.

반응형
Comments