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이 될 때까지 반복해서 끝에 붙입니다.
.lower()
사용하여 소문자로 만들기.isalpha()
로 알파벳, .isdigit()
으로 숫자인 경우, in '-_.'
로 적합한 경우만 rec_id
에 붙이기.replace(old, new)
로 ..을 .로 바꾸기 (..가 존재하지 않을 때 까지 반복)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)