문제
https://programmers.co.kr/learn/courses/30/lessons/72410
내 풀이
파이썬 함수를 얼마나 자유자재로 쓸 수 있는지에 따라 푸는 속도가 달라지는 문제이다.
문제에서 하라는 대로 그대로 구현했다.
def solution(new_id):
# 1
new_id = new_id.lower()
# 2
tmp = ""
for s in new_id:
if s.isalpha() or s.isdigit() or s == '-' or s == '_' or s == '.':
tmp += s
# 3, 4
new_id = tmp.split('.')
new_id = '.'.join([x for x in new_id if x != ''])
# 5
if new_id == '': new_id = 'a'
# 6
if len(new_id) >= 16: new_id = new_id[:15]
if new_id[-1] == '.': new_id = new_id[:len(new_id)-1]
# 7
if len(new_id) == 1: new_id = new_id*3
if len(new_id) == 2: new_id = new_id + new_id[-1]
return new_id
다른 풀이
새로 배운 것
- c in ['-', '_', '.']
- answer = answer.replace('..', '.') -> 근데 내 방법이 좀 더 좋은 것 같다.
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
과거 나의 풀이
풀이가 많이 지저분하다.
def solution(new_id):
ans = ""
# 1
new_id = new_id.lower()
# 2
for n in new_id:
if (n.isalpha() == False) and (n.isdigit() == False) and (n != '-') and (n != '_') and (n != '.'):
continue
ans += n
new_id = ans
ans = ""
# 3
flag = False
for n in new_id:
if n == '.' and flag == False:
ans += n
flag = True
elif n != '.':
ans += n
flag = False
new_id = ans
ans = ""
# 4
if new_id[0] == '.' and new_id[-1] == '.':
new_id = new_id[1:len(new_id)]
elif new_id[0] == '.' and new_id[-1] != '.':
new_id = new_id[1:]
elif new_id[0] != '.' and new_id[-1] == '.':
new_id = new_id[:len(new_id)-1]
# 5
if new_id == "":
new_id = "a"
# 6
if len(new_id) >= 16:
new_id = new_id[:15]
if new_id[0] == '.' and new_id[-1] == '.':
new_id = new_id[1:len(new_id)]
elif new_id[0] == '.' and new_id[-1] != '.':
new_id = new_id[1:]
elif new_id[0] != '.' and new_id[-1] == '.':
new_id = new_id[:len(new_id)-1]
# 7
if len(new_id) <= 2:
n = new_id[-1]
new_id += n*(3-len(new_id))
return new_id
총평
과거의 '나'는 좀 수치스럽게 코드를 짰던 것 같다.
현재의 '나'는 좀 발전된 것 같기도~
'알고리즘 > 카카오 EASY' 카테고리의 다른 글
키패드 누르기 (Level 1) (0) | 2022.05.26 |
---|---|
숫자 문자열과 영단어 (Level 1) (0) | 2022.05.25 |
오픈채팅방 (Level 2) (0) | 2022.05.24 |
문자열 압축 (Level 2) (0) | 2022.05.23 |
신고 결과 받기 (Level 1) (0) | 2022.05.20 |