Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 알고리즘 공부
- dfs
- greedy algorithm
- swift
- SwiftUI
- 정렬
- iOS개발
- ios
- Algorithm
- Kotlin
- UIKit
- error
- 백준온라인저지
- BFS
- Python
- Level 1
- Swift공부
- 파이썬 풀이
- 프로그래머스
- 오토레이아웃
- 공부
- 앱개발
- 백준 온라인 저지
- 파이썬
- Autolayout
- 그리디 알고리즘
- 알고리즘
- Clean Architecture
- Android
- 안드로이드 공부
Archives
- Today
- Total
Tori의 개발 공부
[Level 1] [python] 신규아이디 추천 본문
문제
파이썬 풀이
import re
def solution(new_id):
new_id = new_id.lower() #1단계
#2단계
new_id = re.sub('[=+,#/\?:^$@*※~&%!\(\)\[\]\<\>\{\}]', '', new_id)
#3단계
new_id = re.sub('[.]\.+','.',new_id)
#4단계
new_id = new_id.strip('.')
#5단계
if not new_id :
new_id = "a"
#6단계
if len(new_id) > 15 :
new_id = new_id[0:15]
if new_id[-1] == "." :
new_id = new_id[:-1]
#7단계
while len(new_id) < 3 :
new_id += new_id[-1]
answer = new_id
return answer
1단계 소문자 변환
파이썬의 lower()함수를 이용하여 모든 알파벳에 대해 소문자로 변환해주었다.
2단계 특수문자 제거
정규표현식과 re.sub()함수를 이용하여 특수문자를 ""(빈 문자열)로 치환해주었다.
re.sub(패턴, 바꿀 문자열, 검사할 문자열, 바꿀횟수) 와 같이 사용하고 바꿀 횟수를 생략하면 찾은 문자열을 모두 바꾼다.
3단계 중복 점 제거
re.sub함수를 이용하여 .이 반복되는 구간을 찾아 "."으로 치환해주었다.
4단계 양 끝 점 제거
strip()함수를 이용하였다.
stript함수에 인자를 전달하지 않으면 양 끝 공백을 제거하지만, 인수로 문자를 전달해주면 해당 문자가 양 끝에 있을 시 제거해준다.
따라서 함수에 인자로 "."을 전달하여 양 끝의 점을 제거해주었다
5단계 빈 문자열 시 a 대입
빈 문자열은 False를 반환하기 때문에 if not new_id를 통해 빈 문자열 시 not False -> True가 되어 해당 조건문이 실행되어 new_id에 a를 대입해준다.
6단계 15자리 초과 문자열 잘라내기
여기서 처음에 간과했던 부분이 나왔다.
바로 15자리로 자른다음 마지막 문자가 .(점)이 될 수 있다는 점이다.
따라서 인덱싱을 통해 15자리로 자른 후 마지막 글자가 .인지 확인하여 .이면 .을 제거해주어야한다.
7단계 3자리로 맞춰주기
3자리 이하일 경우 [-1] 즉 마지막 글자를 현재 new_id값을 붙여준다.
'Algorithm > 프로그래머스 문제 풀이' 카테고리의 다른 글
[Level 2] [python] 롤케이크 자르기 (0) | 2022.11.19 |
---|---|
[Level 1] [python] 기사단원의 무기 (0) | 2022.11.17 |
[Level 1] [python] 크레인 인형뽑기 게임 (0) | 2022.01.20 |
[Level 1] [python] 실패율 (0) | 2022.01.03 |
[Level 1] [python] K번째수 (0) | 2021.12.29 |