[프로그래머스] 신규 아이디 추천 (파이썬)

LEE·2022년 3월 3일
0

프로그래머스

목록 보기
3/25
post-thumbnail

문제

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

1단계 newid의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(
), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.


풀이

  1. .lower() 사용하여 소문자로 만들기
  2. .isalpha()로 알파벳, .isdigit()으로 숫자인 경우, in '-_.'로 적합한 경우만 rec_id에 붙이기
  3. .replace(old, new)로 ..을 .로 바꾸기 (..가 존재하지 않을 때 까지 반복)
  4. 마침표가 맨앞이나 맨뒤에 있으면 제거하기 (rec_id의 길이가 1이상인 경우만)
  5. 빈 문자열이면 'aaa' 추천
  6. 길이가 16 이상이면 15로 자르고 맨 뒤가 마침표로 끝나면 마침표 제거
  7. 길이가 2 이하이면 맨 마지막 문자 반복해서 길이 3으로 맞추기

코드

def solution(new_id):
    # 1
    new_id = new_id.lower()
    # 2
    rec_id = ''
    for w in new_id:
        if w.isalpha() or w.isdigit() or w in '-_.':
            rec_id += w
    # 3
    while '..'  in rec_id:
        rec_id = rec_id.replace('..', '.')
    # 4
    if rec_id and rec_id[0] == '.':
        rec_id = rec_id[1:]
    if rec_id and rec_id[-1] == '.':
        rec_id = rec_id[:-1]
    # 5
    if rec_id == '': rec_id += 'aaa'
    # 6
    if len(rec_id) > 15:
        if rec_id[14] == '.': rec_id = rec_id[:14]
        else: rec_id = rec_id[:15]
    # 7
    if len(rec_id) == 1:
        rec_id += rec_id[-1] * 2
    elif len(rec_id) == 2:
        rec_id += rec_id[-1]
    return rec_id

후기

문자열 문제였다. 규칙만 잘 따라하면 크게 문제될 것은 없었다.

정확성 테스트

테스트 1 〉	통과 (0.01ms, 10MB)
테스트 2 〉	통과 (0.01ms, 10.1MB)
테스트 3 〉	통과 (0.01ms, 10.2MB)
테스트 4 〉	통과 (0.01ms, 10.3MB)
테스트 5 〉	통과 (0.01ms, 10.1MB)
테스트 6 〉	통과 (0.01ms, 10.2MB)
테스트 7 〉	통과 (0.01ms, 10.2MB)
테스트 8 〉	통과 (0.01ms, 10MB)
테스트 9 〉	통과 (0.00ms, 10.1MB)
테스트 10 〉	통과 (0.01ms, 10.2MB)
테스트 11 〉	통과 (0.01ms, 10.1MB)
테스트 12 〉	통과 (0.01ms, 10.2MB)
테스트 13 〉	통과 (0.01ms, 10.3MB)
테스트 14 〉	통과 (0.01ms, 10.1MB)
테스트 15 〉	통과 (0.02ms, 10.4MB)
테스트 16 〉	통과 (0.02ms, 10.1MB)
테스트 17 〉	통과 (0.05ms, 10.3MB)
테스트 18 〉	통과 (0.08ms, 10.1MB)
테스트 19 〉	통과 (0.16ms, 10.2MB)
테스트 20 〉	통과 (0.12ms, 10.1MB)
테스트 21 〉	통과 (0.26ms, 10MB)
테스트 22 〉	통과 (0.10ms, 10.3MB)
테스트 23 〉	통과 (0.15ms, 10.1MB)
테스트 24 〉	통과 (0.25ms, 10.2MB)
테스트 25 〉	통과 (0.15ms, 10.2MB)
테스트 26 〉	통과 (0.28ms, 10.2MB)
profile
쑥쑥 개발자

0개의 댓글