-
신규 아이디 추천Programming/Programmers 문제풀이 2021. 3. 8. 09:31728x90
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
'Programming > Programmers 문제풀이' 카테고리의 다른 글
백준 14888 - 연산자 끼워넣기 (0) 2022.04.25 백준 1339 - 단어 수학 (0) 2022.04.24 메뉴 리뉴얼 (0) 2021.03.08 디스크 컨트롤러 (0) 2020.12.24