1. 요약
- 사용자가 카카오 계정을 만들기 위해, 문제에서 주어진 제약조건을 만족해야한다.
- 제약조건을 만족하지 못하면, 사용자가 입력한 계정과 비슷하고 제약조건을 만족하는 계정을 추천한다.
우리가 해야 할 일
- 사용자가 입력한 카카오 계정 유효성 검사
- 유효성을 만족하지 못하면, 유효성을 만족하는 비슷한 계정 추천
2. 알고리즘
- 문제에서 알고리즘이 주어졌기 때문에, 있는 그대로 구현하면 된다.
3. 코드
valid_chs = [chr(i) for i in range(ord('a'), ord('z')+1)]
valid_chs += ['.', '-', '_']
valid_chs += [str(i) for i in range(10)]
def remove_unvalid_ch(new_id):
tmp = ''
for ch in new_id:
if ch in valid_chs: tmp += ch
return tmp
def transform_one_point(new_id):
if not new_id: return ''
cnt = 0
tmp = ''
for ch in new_id:
if ch == '.':
cnt += 1
if cnt == 2:
cnt = 1
continue
else: cnt = 0
tmp += ch
return tmp
def remove_sides_point(new_id):
if not new_id or (len(new_id) == 1 and new_id[0] == '.'): return ''
tmp = list(new_id)
if new_id[0] == '.': del tmp[0]
if new_id[-1] == '.': del tmp[-1]
return ''.join(tmp)
def solution(new_id):
new_id = new_id.lower()
new_id = remove_unvalid_ch(new_id)
new_id = transform_one_point(new_id)
new_id = remove_sides_point(new_id)
if not new_id: new_id = 'a'
if len(new_id) > 15: new_id = new_id[:15]
if new_id[-1] == '.': new_id = new_id[:14]
if len(new_id) < 3:
for _ in range(len(new_id), 3):
new_id += new_id[-1]
answer = new_id
return answer