https://programmers.co.kr/learn/courses/30/lessons/72410
풀이
정말 명세서 혹은 기획서와 유사하게 조건이 주어지고 조건에 맞게 코딩하는 문제였다
파이썬이 익숙치 않아 검색을 좀 했다
1. 소문자로 변경 https://blockdmask.tistory.com/416
2. 반복문을 돌며 제거하는 방법 https://devpouch.tistory.com/110
3. 스트링을 리스트로 https://codechacha.com/ko/python-convert-string-to-char-list/
def solution(new_id):
new_id = new_id.lower()
print(new_id)
new_id = list(new_id)
for i in new_id[:]: # 조건2, 제대로 지워질 수 있도록 복사본으로 반복
if i == '.' or i == '-' or i == '_' or (i <= 'z' and i >= 'a') or (i <= 'Z' and i >= 'A') or (i >= '0' and i <= '9'):
continue
new_id.remove(i)
new_id2 = []
for i in range(len(new_id) - 1): # 조건3
if not (new_id[i] == '.' and new_id[i+1] == '.'):
new_id2.append(new_id[i])
if new_id[-1] != '.': # 조건 4
new_id2.append(new_id[-1])
if new_id2 and new_id2[0] == '.':
new_id2.pop(0)
new_id = new_id2
if not new_id: # 조건 5
new_id = ['a']
new_id = new_id[:15] # 조건 6
if new_id and new_id[-1] == '.':
new_id.pop()
for i in range(3): #조건 7
if len(new_id) < 3:
new_id.append(new_id[-1])
return ''.join(new_id)
대박 지저분;;
다른 사람의 풀이
import re
def solution(new_id):
st = new_id
st = st.lower()
st = re.sub('[^a-z0-9\-_.]', '', st)
st = re.sub('\.+', '.', st)
st = re.sub('^[.]|[.]$', '', st)
st = 'a' if len(st) == 0 else st[:15]
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
return st
정규식으로 완전 깔끔하게 푸셨다.
파이썬에서는 정규식을 한 번도 안 써 봐서 시도를 못 해봤는데, 이번 기회에 조금 익혀간다.
파이썬 정규식 설명 - https://wikidocs.net/4308
'알고리즘 스터디 2021.07~' 카테고리의 다른 글
[프로그래머스] 2018 카카오 블라인드 - [1차] 추석 트래픽 (0) | 2021.07.16 |
---|---|
[프로그래머스] 2019 카카오 겨울인턴 - 크레인 인형뽑기 (2) | 2021.07.16 |
[프로그래머스] 2020 카카오 문자열 압축 (0) | 2021.07.11 |
[프로그래머스] 2019 카카오 오픈채팅방 (1) | 2021.07.08 |
[프로그래머스] 2021 카카오 메뉴 리뉴얼 (1) | 2021.07.04 |