新しいIDの推奨
質問元:プログラマ
質問の概要
신규아이디 추천
- 네오는 유저들이 규칙에 맞지 않는 아이디를 입력했을 때,
- 입력한 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발해야 한다.
규칙)
- 아이디의 길이는 3자 ~ 15자
- 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 만 사용 가능
- 단, 마침표(.)는 처음과 끝에 사용할 수 없으며, 연속으로 사용 불가
- 빈문자열이 되면 a로 채우고, 길이가 부족하면 바로 앞문자 반복
- 길이가 넘어가면 뒤의 문자열은 제외
입력)
new_id = '...!@BaT#*..y.abcdefghijklm'
출력)
result = 'bat.y.abcdefghi'
コード#コード#
def solution(new_id):
answer = ''
# 1. 소문자 적용
new_id = new_id.lower()
# 2. 숫자, 빼기(-), 밑줄(_), 마침표(.)만 추가하기
for char in new_id:
if char.isalpha() or char.isdigit() or char in ['-', '_', '.']:
answer += char
# 3. 마침표 2개인 경우 1개로 대체
while '..' in answer:
answer = answer.replace('..','.')
# 4. 마침표 맨앞 맨뒤 제거
if answer[0] == '.': # answer 길이가 1보다 작으면 그냥 . 두기
answer = answer[1:] if len(answer) > 1 else '.'
if answer[-1] == '.':
answer = answer[:-1]
# 5. 빈문자열엔 a 넣기
if answer == '':
answer = 'a'
# 6. 15자 넘어가면 뒤에 자르기
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7. 3자 미만이면 맨 뒷글자 넣어주기
while len(answer) < 3:
answer += answer[-1]
return answer
solution('...!@BaT#*..y.abcdefghijklm')
'bat.y.abcdefghi'
正規表現でのコードの使用
import re
def solution(new_id):
st = new_id
st = st.lower() # 소문자
st = re.sub('[^a-z0-9\-_.]', '', st) # 정해진 문자빼고 다빼기
st = re.sub('\.+', '.', st) # 2개이상이면 하나로 바꾸기
st = re.sub('^[.]|[.]$', '', st) # 맨앞 맨뒤 점이면 없애기
st = 'a' if len(st) == 0 else st[:15] # 길이가 0이면 a 넣고 아니면 15자까지 두기
st = re.sub('^[.]|[.]$', '', st) # 15자까지 둔 경우 마침표 맨앞맨뒤 검사
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
# 길이가 2보다 작으면 맨뒤문자 반복
return st
solution('...!@BaT#*..y.abcdefghijklm')
'bat.y.abcdefghi'
Reference
この問題について(新しいIDの推奨), 我々は、より多くの情報をここで見つけました https://velog.io/@wltn39/신규-아이디-추천テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol