[프로그래머스] 신규 아이디 추천 Python 풀이
# 해당 포스팅은 이제 막 알고리즘 공부를 시작한 초보 수준에서 작성했음을 이해해주시고, 비난보다는 따뜻한 조언을 부탁드립니다.
안녕하십니까, 간토끼입니다.
오늘은 프로그래머스(Programmers) 신규 아이디 추천 문제에 대해 다뤄보겠습니다.
2021 카카오 블라인드 채용 코딩테스트 문제(Lv.1 수준)입니다.
1. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/72410
유저가 입력한 아이디가 카카오의 규칙과 맞지 않다면 규칙에 맞게 아이디를 수정하여 새로운 아이디를 추천해주는 문제입니다.
규칙이 까다로운 것 같지만 친절히 절차까지 제시해줘서 쉬운 문제였다고 생각합니다.
문제의 규칙은 위와 같습니다.
크게 1단계부터 7단계의 절차를 따라 입력된 아이디를 변환하는 과정을 코드 상으로 구현해주면 되는 문제입니다.
예시를 보시면 크게 어려운 부분은 없으실 거라 생각합니다.
2. 접근 방법
다음과 같이 접근하였습니다.
먼저 문제를 보자마자 "정규표현식!"이 생각났지만... 생각만 나고 어떻게 표현해야할지 생각이 안 나더라고요.
만약 이게 코딩테스트라면 검색을 할 수 없으니 그냥 정규표현식은 사용하지 못한다 가정하고 노가다로 구현해봤습니다. 우선 당장 있을 코테를 보는 게 중요하니... 과감하게 패스했습니다.
개인적으로 2단계 규칙과 3단계 규칙을 제외하면 크게 까다로운 규칙은 없었습니다.
정규표현식을 사용하지 못하니... 2단계 규칙을 구현할 때는 문자열을 일일이 비교해가면서 조건에 맞는지 따져주었습니다.
3단계는 while문을 사용하면 간단하게 표현할 수 있습니다. 바로 replace함수를 이용해 ".."을 "." 으로 바꿔주는 건데요.
점(".")이 2개 연속돼있을지, 혹은 3개 이상 연속돼있을지 모르니 while문을 이용해주면 간편하게 구현할 수 있습니다. 만약 "."이 3개 연속된 "..." 경우를 가정해보면, "..." -> ".." -> "." 으로 결국 점이 하나만 남게 되겠죠.
주석을 잘 달아놨으니 코드를 보시면 이해가 쉬우실 겁니다.
직관적으로 짰습니다. (아직 깔끔하게 못 짜서요 ㅜㅜ)
프로그래밍 잘하시는 분들 너무 부럽네요 ~
3. 코드
def solution(new_id):
# 규칙에 맞게 ID 추천하기
# (1) 대문자 -> 소문자로 변환
new_id = new_id.lower()
# (2) 소문자, 숫자, "-", "_", "." 외 단어 제거
dic = ["-", "_", "."]
check = []
for i in range(len(new_id)):
if new_id[i] not in dic:
if new_id[i].isalpha() or new_id[i].isdigit():
continue
else:
check.append(new_id[i]) # dic에 없는 특수문자를 따로 저장
for j in range(len(check)):
new_id = new_id.replace(check[j], "") # 특수문자 제거
# (3) "." 두 번 이상 등장 -> "." 하나로 치환
while '..' in new_id:
new_id = new_id.replace('..', '.')
# (4) "."이 처음 or 끝에 있다면? -> 제거
if len(new_id) > 0:
if new_id[0] == '.':
new_id = new_id[1:]
if len(new_id) > 0:
if new_id[-1] == '.':
new_id = new_id[:-1]
# (5) 빈 문자열이면 a 대입
if len(new_id) == 0:
new_id = 'a'
# (6) id의 길이가 16 이상이면 0:15까지만 남기고 제거
if len(new_id) > 15:
new_id = new_id[0:15] # 0번 ~ 14번
if new_id[-1] == ".": # 만약 마지막 글자가 . 이면 제거
new_id = new_id[:-1]
# (7) id의 길이가 2자 이하라면 new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 붙임.
if len(new_id) <= 2:
while True:
if len(new_id) == 3:
break
else:
last_a = new_id[-1]
new_id = new_id + last_a
answer = new_id
return answer
감사합니다.
잘 읽으셨다면 게시글 하단에 ♡(좋아요) 눌러주시면 감사하겠습니다 :)
(구독이면 더욱 좋습니다 ^_^)
* 본 블로그는 학부생이 운영하는 블로그입니다.
따라서 포스팅에 학문적 오류가 있을 수 있으며, 이를 감안해서 봐주시면 감사하겠습니다.
- 간토끼(DataLabbit)
- B.A. in Economics, Data Science at University of Seoul