https://programmers.co.kr/learn/courses/30/lessons/72410
생각
문자열은 파이썬 감도 살릴겸 계속 파이썬으로 연습해야겠습니다!
파이썬에서 list를 반복문을 돌며 remove와 같은 업데이트 연산을 해줘야할땐 직접 list에 접근하지 않고 리스트 슬라이싱(for item in origin_list[:])으로 작업하면 됩니다.
3번째 단계에서 .이 두번이상연속되면 .을 하나로 치환해야 합니다. 저는 연속된 . 을 카운트하고 . 이 아니라면 cnt = 0 으로 초기화했습니다. 반복문을 돌면서 문자가 . 이고 cnt = 0 이면 임시결과에 문자를 누적합니다. 만약 .이 아닌 문자라면 바로 누적해줍니다.
(참고 : 3번 조건 더 나은 코드)
# 3
while '..' in answer:
answer = answer.replace('..', '.')
Python Code
def solution(new_id):
answer = ''
#1. 모두 소문자로 치환
new_id = new_id.lower()
#2. 소문자 숫자 - _ . 제외 모든 문자 제거
for c in new_id[:]:
if c.islower(): answer += c
if c.isdigit(): answer += c
if c in ['-', '_', '.'] : answer += c
#print("2단계",temp)
#3. ..이 2번이상연속되면 . 하나로 치환
cnt = 0
tmp = []
for i, c in enumerate(answer) :
if c == '.':
if cnt == 0:
tmp += c
cnt+=1
else:
cnt = 0
tmp += c # . 아니면 바로 누적
#print("3단계",tmp)
#4 . 처음이나 끝이면 제거
if(tmp[0] == '.'): tmp.pop(0)
if(len(tmp) > 0 and tmp[-1] == '.'):
if len(tmp) > 0:
tmp.pop(-1)
#print("4단계",tmp)
#5. 빈 문자열이면 a를 대입
if len(tmp) == 0 : tmp += 'a'
#print("5단계",tmp)
#6. 길이 16이상이면, 첫 15개 제외 나머지 제거
if len(tmp) >= 16 :
tmp = tmp[:15]
if tmp[-1] == '.' : tmp = tmp[:-1]
#print("6단계",tmp)
#7. 길이 2자 이하,
if len(tmp) <= 2:
c = tmp[-1]
while(True):
if(len(tmp) == 3) : break
tmp += c
answer = "".join(tmp)
# print("7단계",answer)
return answer
'Algorithm' 카테고리의 다른 글
[프로그래머스] Python - 괄호 변환 (0) | 2021.05.02 |
---|---|
[프로그래머스] Python - 보석 쇼핑 (0) | 2021.04.28 |
[SWEA] JAVA - 2382. [모의 SW 역량테스트] 미생물 격리 (0) | 2021.04.23 |
[SWEA] JAVA - 2112. [모의 SW 역량테스트] 보호 필름 (0) | 2021.04.21 |
[SWEA] JAVA - 1949. [모의 SW 역량테스트] 등산로 조성 (0) | 2021.04.20 |