def StringRemove(new_id) :
for id in new_id :
id_type = type(id)
if id_type == int :
pass
if (ord(id) >= 97 and ord(id) <= 122) or id in ['-', '_', '.'] :
pass
else :
new_id = new_id.replace(id, '')
return new_id
def FinalProcess(new_id) :
if len(new_id) == 0 :
new_id = 'a'
elif len(new_id) >= 16 :
new_id = new_id[:15]
new_id = new_id.rstrip('.')
if len(new_id) <= 2 :
while (True) :
if len(new_id) == 3 :
break
else :
new_id += new_id[-1]
return new_id
def CombineDot(new_id) :
idx = [i for i, x in enumerate(new_id) if x == '.']
i = 0
while (i < len(idx)-1) :
if idx[i] + 1 == idx[i+1] :
new_id[i:i+2].replace('..', '.')
return new_id
def solution(new_id):
id = new_id.lower()
id = StringRemove(id)
id = CombineDot(id)
id = new_id.strip('.')
id = FinalProcess(id)
return id
또또 ...... 그놈의 시간초과...
근데 누가봐도 효율성 없이 짜긴 함 ㅋ
시간 초과 말고도 그냥 실패뜬 것도 있길래 왜지? 했는데
누가.. 타입 검사를 ..
if id_type == int :
이렇게.. 하나?
def StringRemove(new_id) :
for id in new_id :
try :
id = int(id)
except :
if (ord(id) >= 97 and ord(id) <= 122) or id in ['-', '_', '.'] :
pass
else :
new_id = new_id.replace(id, '')
return new_id
def FinalProcess(new_id) :
if len(new_id) == 0 :
new_id = 'a'
elif len(new_id) >= 16 :
new_id = new_id[:15]
new_id = new_id.rstrip('.')
if len(new_id) <= 2 :
while (True) :
if len(new_id) == 3 :
break
else :
new_id += new_id[-1]
return new_id
def CombineDot(new_id) :
idx = [i for i, x in enumerate(new_id) if x == '.']
i = 0
while (i < len(idx)-1) :
if idx[i] + 1 == idx[i+1] :
new_id[i:i+2].replace('..', '.')
return new_id
def solution(new_id):
id = new_id.lower()
id = StringRemove(id)
id = CombineDot(id)
id = id.strip('.')
id = FinalProcess(id)
return id
그래서 try-except 문으로 숫자인지 검사하고
오류나면 문자라는 거니까 except 안에 넣어줬다..!!
그랬지만
그래도 .. 이제 시간초과만 해결하면 되는거 아닐까?
라고 생각하다가 문득
왜 1, 2번 케이스만 자꾸 시간초과 뜨는거지? 봤더니
while 문 안에서 break 조건을 주지 않은 나를 탓해라 ....
def StringRemove(new_id) :
for id in new_id :
try :
id = int(id)
except :
if (ord(id) >= 97 and ord(id) <= 122) or id in ['-', '_', '.'] :
pass
else :
new_id = new_id.replace(id, '')
return new_id
def FinalProcess(new_id) :
if len(new_id) == 0 :
new_id = 'a'
elif len(new_id) >= 16 :
new_id = new_id[:15]
new_id = new_id.rstrip('.')
if len(new_id) <= 2 :
while (True) :
if len(new_id) == 3 :
break
else :
new_id += new_id[-1]
return new_id
def CombineDot(new_id) :
idx = [i for i, x in enumerate(new_id) if x == '.']
i = 0
while (i < len(idx)//2) :
new_id = new_id.replace('..', '.')
i += 1
return new_id
def solution(new_id):
id = new_id.lower()
id = StringRemove(id)
id = CombineDot(id)
id = id.strip('.')
id = FinalProcess(id)
return id
역시 내 힘으로 푼 게 제일 짜릿해 >, <
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
이 조건보고 처음에는 그럼 점이 여러 개면 다 어떻게 처리하지? 했는데
그냥 while 문 돌리면서 계속 replace('..', '.') 하면 되는 .. 간단한 것이었ㄷr...
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv1 - 2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 (Python) (0) | 2022.06.30 |
---|---|
[프로그래머스 Lv1 - 2019 KAKAO BLIND RECRUITMENT] 실패율 (Python) (0) | 2022.06.30 |
[프로그래머스 Lv1 - 2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기 (Python) (0) | 2022.06.28 |
[프로그래머스 Lv1] K번째 수 (Python) (0) | 2022.06.27 |
[프로그래머스 Lv2] 행렬의 곱셈 (Python) (0) | 2022.06.26 |