문제
https://school.programmers.co.kr/learn/courses/30/lessons/72410
설계
- 단계별 구현력을 요구하는 문제라고 생각했다.
풀이
- 2단계는 아스키 코드를 사용하여 1중 for문으로 제거했다.
- 테스트케이스를 절반 이상 틀렸는데 3단계 마침표 중복 치환을 수정하고 통과했다.
def solution(new_id):
# 1단계 : 모두 소문자
new_id = new_id.lower()
# 2단계 : 사용 불가능 문자 제거
arr = list(new_id)
for i in range(len(arr)-1, -1, -1):
if (45 <= ord(arr[i]) and ord(arr[i]) <=46) or \
(48 <= ord(arr[i]) and ord(arr[i]) <= 57) or \
(97 <= ord(arr[i]) and ord(arr[i]) <= 122) or \
(ord(arr[i]) == 95):
continue
arr.pop(i)
# 3단계 : 마침표 중복 치환
for i in range(len(arr)-1, 0, -1):
if arr[i] == '.' and arr[i-1] == '.':
arr.pop(i)
# 4단계 : 마침표(.)가 처음이나 끝에 위치한다면 제거
if arr[0] == '.':
arr.pop(0)
if len(arr) > 0 and arr[-1] == '.': # len(arr) > 0 : index error 방지
arr.pop()
# 5단계 : 빈 문자열이라면 a를 대입
if arr == []:
arr.append('a')
for i in range(len(arr)):
if arr[i] == ' ':
arr[i] = 'a'
# 6단계 : 길이가 16자 이상이면 제거, 제거 후 끝에 마침표가 있으면 추가로 제거
if len(arr) >= 16:
arr = arr[0:15]
if arr[-1] == '.':
arr.pop()
# 7단계 : 길이가 2자 이하라면, 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙인다
while len(arr) <= 2:
arr.append(arr[-1])
answer = ''.join(arr) # 리스트 -> 문자열로 합치기
return answer
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2022.08.07 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트, 파이썬 (0) | 2022.08.04 |
[프로그래머스] 신고 결과 받기 - 파이썬 (0) | 2022.07.27 |
[프로그래머스] SQL 고득점 Kit - IS NULL (0) | 2022.04.19 |
[프로그래머스] SQL 고득점 Kit - GROUP BY (0) | 2022.04.19 |