코딩 테스트 (Coding Test)
[프로그래머스] **2021 카카오 신규 아이디 추천
Universe_lee
2023. 1. 11. 15:45
나의 풀이
def solution(new_id):
alphabet = [chr(i) for i in range(ord('a'), ord('z') + 1)]
numbers = [str(i) for i in range(10)]
validation = alphabet + numbers + ['-', '_', '.']
# level 1, 2
for i, j in enumerate(new_id):
if j.isupper():
new_id = new_id.replace(j, j.lower())
if j not in validation:
new_id = new_id.replace(j, '')
print("level 1, 2", new_id)
# level 3
new_id = [i for i in new_id]
for i in range(len(new_id) - 1):
if new_id[i] == '.':
if new_id[i + 1] == '.':
new_id[i] = ''
print("level 3 ", "".join(map(str, new_id)))
# level 4
new_id = "".join(map(str, new_id))
new_id = [i for i in new_id]
while True:
if new_id[0] == '.':
new_id[0] = ''
continue
if new_id[-1] == '.':
new_id[-1] = ''
continue
break
new_id = "".join(map(str, new_id))
print("level 4 ", new_id)
# level 5
if not any(new_id):
new_id = 'a'
print("level 5 ", new_id)
# level 6
new_id = [i for i in new_id]
if len(new_id) >= 16:
new_id = new_id[:15]
while True:
if new_id[-1] == '.':
new_id[-1] = ''
continue
break
new_id = "".join(map(str, new_id))
print("level 6 ", new_id)
# level 7
if len(new_id) <= 2:
new_id = new_id + new_id[-1] * (3 - len(new_id))
print("level 7", new_id)
return new_id
배울만한 코드
def solution(new_id):
answer = ""
# level 1
new_id = new_id.lower()
# level 2
for i in new_id:
if i.isalpha() or i.isdigit() or i in ['-', '_', '.']:
answer += i
# level 3
while '..' in answer:
answer = answer.replace('..', '.')
# level 4
if answer[0] == '.':
answer = answer[1:] if len(answer) > 1 else '.'
if answer[-1] == '.':
answer = answer[:-1]
# level 5
if answer == "":
answer = 'a'
# level 6
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# level 7
while len(answer) < 3:
answer += answer[-1]
return answer
정말 모든면에서 나보다 완벽한 코드라 보면서 머리가 멍한 기분이 들었다.
isalpha(), isdigit(), while '..' in answer:, .... 많은 성장을 할 수 있는 답안이었다.