KEEP GOING
[python] 프로그래머스 72410번 : 신규 아이디 추천 (isdigit(), isalpha()) 본문
[python] 프로그래머스 72410번 : 신규 아이디 추천 (isdigit(), isalpha())
jmHan 2022. 3. 17. 17:08https://programmers.co.kr/learn/courses/30/lessons/72410
[구현]
문자열.replace('a', 'b') : sorted() 처럼 return 값이 존재하므로 반드시 변수에 저장
문자열 = 문자열.replace('..', '.')
# 3단계
while '..' in new_id:
new_id.replace('..', '.')=> 문자열에 '..'가 존재하는 경우, 무한루프 발생...
[코드 구현]
def solution(new_id):
answer = ''
# 1단계
new_id = new_id.lower()
# 2단계
tmp = ''
for s in new_id:
if s in [str(i) for i in range(10)]:
tmp += s
if 97 <= ord(s) <= 122 or s in ['-', '_', '.']:
tmp += s
new_id = tmp
# 3단계
while True:
if '..' in new_id:
new_id = new_id.replace('..', '.')
else:
break
# 4단계
if new_id[0] == '.':
new_id = new_id[1:]
if len(new_id) >=2 and new_id[-1] == '.':
new_id = new_id[:-1]
if len(new_id) == 1 and new_id[-1] == '.':
new_id = ''
# 5단계
if new_id == '':
new_id = 'a'
# 6단계
while 16 <= len(new_id):
new_id = new_id[:-1]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 7단계
while len(new_id) <= 2:
new_id = new_id + new_id[-1]
return new_id
[2,3,4단계 코드 개선]
문자열.isdigit() : 문자열이 숫자인지 확인하는 메소드
문자열.isalpha() : 문자열이 영어인지 확인하는 메소드
4단계에서 맨 앞 존재하는 '.'을 제거할 때 길이가 1 이상이면 그냥 남겨두고
맨 뒤에 존재하는 '.'이 존재하는 경우에 제거하도록 구현하면
if new_id[-1] == '.':
new_id = new_id[:-1] 와 같이 처리 가능.
만약에 맨 앞 존재하는 '.'을 제거할 때 길이가 1이상이라는 조건없이 제거한다면
new_id = '.' 일때 맨 뒤에 존재하는 '.'을 제거 할때 new_id[:-1]에서 인덱스 에러 발생 if new_id[-1] == '.':
new_id = new_id[:-1]
IndexError: string index out of range 인덱스 에러 발생
6단계에서는 이미 길이가 16이상이라는 전제하에
길이가 15가 될 때까지 마지막 원소를 제거하므로 인덱스 에러가 발생할 이유가 없다.
[코드 개선]
def solution(new_id):
# 1단계
new_id = new_id.lower()
# 2단계
tmp = ''
for s in new_id:
if s.isdigit() or s.isalpha() or s in ['-', '_', '.']:
tmp += s
new_id = tmp
# 3단계
while '..' in new_id:
new_id = new_id.replace('..', '.')
# 4단계
if new_id[0] == '.':
new_id = new_id[1:] if len(new_id) > 1 else '.'
if new_id[-1] == '.':
new_id = new_id[:-1]
# 5단계
if new_id == '':
new_id = 'a'
# 6단계
while 16 <= len(new_id):
new_id = new_id[:-1]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 7단계
while len(new_id) <= 2:
new_id = new_id + new_id[-1]
return new_id
'code review > implementation' 카테고리의 다른 글
[python] 3진법 뒤집기 (strip) (0) | 2022.03.18 |
---|---|
[python] 프로그래머스 92334번 : 신고 결과 받기 (0) | 2022.03.18 |
[python] 프로그래머스 67256번 : 키패드 누르기 (divmod()) (0) | 2022.03.17 |
[python] 백준 6603번 : 로또 (combination, backtracking) (0) | 2022.02.25 |
[python] SWEA 1954 : 달팽이 숫자 (0) | 2022.02.04 |