Programmers/Lv1
[프로그래머스] 신규 아이디 추천 (Lv1) / 2021 카카오 블라인드 채용
hellosonic
2023. 6. 16. 16:17
문제요약
나의 코드 및 설명
def solution(new_id):
answer = ''
#1단계
new_id = new_id.lower()
new_id_list = list(map(str, str(new_id)))
new_id = ''
print("1단계:","".join(map(str,new_id_list)))
#2단계
for i in range(len(new_id_list)):
if 97<=ord(new_id_list[i])<=122 or 48<=ord(new_id_list[i])<=57 \
or new_id_list[i] in ["-", "_", "."]:
new_id += new_id_list[i]
print("2단계:",new_id)
#3단계
condot = ''
for i in range(len(new_id), 1, -1):
condot = '.' * i
new_id = "".join(map(str, new_id.replace(condot,".")))
print("3단계:",new_id)
#4단계
if new_id[0] == "." and new_id[-1] == ".":
new_id = new_id[1:len(new_id)-1]
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]
print("4단계:",new_id)
#5단계
if new_id == "":
new_id = "a"
print("5단계:",new_id)
#6단계
if len(new_id) >= 16:
new_id = new_id[:15]
if new_id[-1] == ".":
new_id = new_id[:14]
print("6단계:",new_id)
#7단계
if len(new_id) <= 2:
x = new_id[-1]
while True:
new_id += x
if len(new_id) == 3:
break
answer = new_id
return answer
다른 코드 및 설명
- 나는 주어진 문자열의 문자가 알파벳인지, 숫자인지 판단하기 위해 아스키코드를 활용했다. 하지만 이 분은 isalpha() 함수와, isdigit() 함수를 활용하였다. isalpha() 함수는 문자인지 확인하는 함수, isdigit() 함수는 숫자인지 확인하는 함수이다.
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
피드백
복잡할 줄 알았지만 생각보다 주어진 문제 조건들만 따라가면 되는 의외로 간단한 문제. 매 단계마다 print를 찍어서 출력값을 봐가면서 문제를 풀면 헷갈리지 않게 풀 수 있다는 것을 몸소 체험할 수 있었다.