https://programmers.co.kr/learn/courses/30/lessons/72410
접근
문제에 친절하게 7단계가 차근차근 나와 있어서 그대로 구현하면 되는 문제였다.
2단계 조건
정규식이 익숙하지 않아서 조금 헤맸다. 이번 기회에 사용해봤다.
파이썬에서 문자열을 치환해주는 메서드로 re.sub을 사용할 수 있다.
import re 해준 뒤, re.sub(정규 표현식, 대상 문자열, 치환 문자) 의 형식으로 쓰면 된다.
정규 표현식은 정확히 사용법을 몰라서 구글링했다.
포함시키고 싶으면 그냥 문자열을, 제외하고 싶으면 r을 붙여주면 된다. 범위를 지정하고 싶으면 [ ] 를 사용한다.
3단계 조건 (꽤 시간 잡아먹은 부분)
최대 '.'이 등장 가능한 경우부터 두번 반복되는 경우까지 거꾸로 접근해서 모두 '.'로 바꿔주면 되는 부분이었다. 너무 어렵게 생각해서 오래 걸렸는데, 파이썬 문자열 replace를 사용하면 쉽게 해결되는 문제였다.
find() 쓰면 여러번 등장해도 가장 맨 앞의 인덱스만 반환하고 끝난다!
find써서 했다가 문자열 안에 등장하는 모든 반복되는 온점을 바꿔야되는데 가장 맨 앞의 요소들만 바꾸고 끝났어서 테케 3개가 죽어도 안잡혔었다 ㅠㅠ 문자열 안에 해당되는 모든 경우를 다 변환하려면 꼭 replace 쓰자~!
replace(현재 문자열에서 바꾸고 싶은 문자, 새로 바꿀 문자, 변경할 횟수)
* 변경할 횟수같은 경우 입력하지 않으면 전체를 의미하는 -1로 지정되어 전체를 변경한다.
주의할 점 (strip 함수 사용할 때)
strip() 사용을 이번에 해봤는데 이거 양 끝에 계속 등장하면 계속 날려버린다...!
혹시 몰라서 "a..".strip('.') 해봤더니 a 나와서 깜짝 놀라서 코드 수정함
근데 또 인덱스로 냅다 접근하면 out of range가 나와서 길이가 0이 아닐떄만 접근하도록 4단계, 5단계 코드에 조건이 추가되었다.
6단계 조건
아직도 파이썬 인덱스 범위가 헷갈린다니 이건 혼나야된다.
총 15글자만 남기려면 str[0:15] 해줘야지...!
그리고 첫번째 글자만 날리려면 str[1:], 마지막 글자만 날리려면 str[:-1] 해주면 된다. 앞 뒤를 생략해줘도 친절한 파이썬이 잘 동작해준다 ^-^
회고
사실 문제에서 다 제공해줘서 어렵지 않은 단순 구현 문제였다. 코드를 어렵게 짤 필요 없이 최대한 쉽게 쉽게 간결하게 짜자. 테스트케이스가 주어지지 않는 코딩테스트가 꽤 있으니까 최대한 모든 경우를 다 제어할 수 있게!
소스코드
import re
def solution(new_id):
answer = ''
# 1단계
new_id = new_id.lower()
# 2단계
new_id = re.sub(r"[^a-z0-9-_.]", "", new_id)
# 3단계
cnt_point = new_id.count('.')
for i in range(cnt_point, 1, -1):
new_id = new_id.replace("."* i, ".")
# 4단계
if len(new_id) != 0:
if new_id[0] == '.':
new_id = new_id[1:]
if len(new_id) != 0:
if new_id[-1] == '.':
new_id = new_id[:-1]
# 5단계
if len(new_id) == 0:
new_id = 'a'
# 6단계
if len(new_id) >= 16:
new_id = new_id[0:15]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 7단계
if len(new_id) <= 2:
while True:
new_id += new_id[-1]
if len(new_id) == 3:
break
answer = new_id
return answer
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 소수 찾기 - python (0) | 2022.07.22 |
---|---|
[프로그래머스] 비밀지도 (0) | 2022.07.02 |
[프로그래머스] 완주하지 못한 선수 (python) (0) | 2022.06.30 |
[프로그래머스] 가장 큰 수 (0) | 2022.06.27 |
[프로그래머스] Lv2. 조이스틱 (0) | 2022.04.06 |