- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410
- 정답 풀이 :
re.sub()에 대해서 공부해야함!
sub(정규표현식, 대체할 문자(열), 전체 문자열)
-> 정규표현식에 맞는 녀석을 찾아서 대체할 문자(열)로 교체해준다
^ : 문자의 시작 또는 not을 의미
$ : 문자의 끝 의미
ㅣ : or 의미
{m,n} : 문자가 m회에서 n회 반복되는 패턴 (n이 비어있으면 m부터 무한대 반복)
\ : 특수 문자를 이스케이프 하거나, 특수 시퀀스를 알린다
r'[a-z0-9-_.]' : a부터 z까지, 0부터 9까지와 _ , . 을 제외한 나머지는 ' '로 대체한다
a-z 0 -9로 표현하면 틀리는 테스트 있음!
import re
def solution(new_id):
new_id = new_id.lower()
new_id = re.sub(r'[^a-z0-9-_.]','',new_id)
new_id = re.sub(r'\.{2,}', '.', new_id)
new_id = re.sub(r'^\.|\.$', '', new_id)
if len(new_id) == 0:
new_id = 'a'
elif len(new_id) >= 16 :
if new_id[14] == '.':
new_id = new_id[:14]
else:
new_id = new_id[:15]
if len(new_id) <= 2:
while len(new_id) < 3:
new_id = new_id + new_id[-1]
return new_id
-시도해본 풀이 :
에러들을 IDE에서 직접 쳐보면서 하느라 시간이 많이 걸렸던 풀이다.
그렇다고 테스트 다 통과하지는 못했다
시작 또는 마지막에 . 가 있는 경우에는 없애는 조건이 있는데, 이것도 바로 하면 안된다
만약 아무 문자도 없는 경우에는 시작과 끝이 없기 때문에 IndexError가 난다
z-.^.에서 계속 z-.^이 출력된다^^
def solution(new_id):
answer = ''
new_id = list(new_id)
for i in range(len(new_id)):
if 65 <= ord(new_id[i]) <= 90:
new_id[i] = chr(ord(new_id[i]) + 32)
first = ''
for i in range(len(new_id)):
if 92 <= ord(new_id[i]) <= 122 or new_id[i].isdigit() or new_id[i] == '-' or new_id[i] =='_' or new_id[i] == '.':
first += new_id[i]
letter = []
first = first.split('.')
for i in range(len(first)):
if len(first[i]) != 0:
letter.append(first[i])
letter.append('.')
#IndexError 계속 발생함
if len(letter) != 0 :
if letter[0] == '.':
letter.pop(0)
if letter[-1] == '.':
letter.pop()
else:
letter.append("a")
#letter에는 원소가 따로따로 있음
temp = ""
for i in range(len(letter)):
if len(letter[i] ) != 0:
temp += letter[i]
if len(temp) >= 16:
temp = temp[0:15]
if temp[-1] =='.':
temp = temp[0:14]
elif len(temp) <= 2:
while len(temp) < 3:
temp += temp[-1]
for i in range(len(temp)):
answer += temp[i]
return answer
'코딩테스트 > 기출' 카테고리의 다른 글
[2020 카카오 인턴십/프로그래머스] 67256번 : 키패드 누르기 (0) | 2022.08.17 |
---|---|
[스택,큐/프로그래머스] 12906번 : 같은 숫자는 싫어 (0) | 2022.08.17 |
[dp/Goldman Sachs] 편집 거리 (0) | 2022.05.27 |
[dp/구글 인터뷰] 못생긴 수(다시) (0) | 2022.05.27 |
[dp기출] 금광 (0) | 2022.05.25 |