Programming/Programmers 문제풀이
신규 아이디 추천
홍열
2021. 3. 8. 09:31
728x90
2021 카카오 코딩테스트 1번 문제
주어진 규칙대로 풀면 되는 문제
정규식 표현을 사용해서 풀어도 되는데, 정규식은 어려우므로 그냥 풀었음
def solution_kakao_1(new_id):
answer = ''
#허용되는 case - 문자, 숫자, '.', '_', '-'
# 1번 규칙
id = new_id.lower()
# 2번 규칙
id = "".join([ch for ch in id if ch.isalnum() or ch == '.' or ch == '-' or ch == '_'])
# 3번 규칙
for i, value in enumerate(id):
if i > 0 and id[i-1] == '.' and id[i] == '.':
continue
answer += value
# 4번 규칙
if len(answer) > 0 and answer[0] == '.':
answer = answer[1:]
if len(answer) > 0 and answer[-1] == '.':
answer = answer[:-1]
# 5번 규칙
if len(answer) == 0:
answer = "a"
# 6번 규칙
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == ".":
answer = answer[:-1]
# 7번 규칙
if len(answer)<=2:
ch = answer[-1]
while len(answer) < 3:
answer += ch
return answer
코드중에 고쳐야할 부분은 다음과 같다.
2번 규칙을 할때 새로운 리스트를 만들었는데, 좀 더 간결히 해보면
for c in new_id:
if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
answer += c
위와 같이 만들 수 있다.
3번 규칙을 검사할때 for문보다는 '..' 자체를 찾고, 대체하면 된다.
while '..' in answer:
answer = answer.replace('..', '.')
7번 규칙에서는 while문으로 계속 반복하면 되는거였다.
while len(answer) < 3:
answer += answer[-1]
다른 사람이 푼 전체 코드는 다음과 같다.
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