2021 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/72410
문제를 자세히 읽고 그대로 구현하면 되는 문제였다
단계별로 함수를 나누어 구현하였는데, 문자열을 압축해내는 과정을 생각해내기 조금 힘들었다
처음에는 for문을 통해 압축을 시도했었는데 실패하였고, while문을 통해 차례차례 접근하며 압축해 나갈 수 있었다
또한, 앞뒤로 마침표를 제거할 때 빈 문자열인지 체크해주는 것도 필요하다!
소스 코드
def remove_ch(id):
for i in id:
if i in "~!@#$%^&*()=+[{]}:?,<>/":
id = id.replace(i,'')
return id
def compressed_dot(id):
idx = 0
while id[idx:].count('.') > 1:
dot_cnt = 0
if id[idx] == '.':
for i in range(idx+1, len(id)):
if id[i] != '.':
break
dot_cnt += 1
id = id[:idx] + '.' + id[idx + dot_cnt + 1:]
idx += 1
return id
def remove_dot(id):
if len(id) and id[0] == '.':
id = id[1:]
if len(id) and id[-1] == '.':
id = id[:-1]
return id
def check_empty(id):
if len(id) == 0:
return "a"
return id
def check_length(id):
if len(id) >= 16:
id = id[:15]
id = remove_dot(id)
if len(id) <= 2:
while len(id) < 3:
id += id[-1]
return id
def solution(new_id):
new_id = new_id.lower() # 소문자 처리
new_id = remove_ch(new_id)
new_id = compressed_dot(new_id)
new_id = remove_dot(new_id)
new_id = check_empty(new_id)
new_id = check_length(new_id)
return new_id
def solution(new_id):
answer = ''
# 1
new_id = new_id.lower()
# 2
for c in new_id:
if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
answer += c
# 3
while '..' in answer:
answer = answer.replace('..', '.')
# 4
if answer[0] == '.':
answer = answer[1:] if len(answer) > 1 else '.'
if answer[-1] == '.':
answer = answer[:-1]
# 5
if answer == '':
answer = 'a'
# 6
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7
while len(answer) < 3:
answer += answer[-1]
return answer