일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- map
- Promise
- 리터럴 타입
- autosize
- async/await
- webpack
- React
- ESlint
- 반공변성
- 호이스팅
- 타입 좁히기
- app router
- TS
- CORS
- tailwind
- 인터섹션
- 공변성
- 태그된 유니온
- 이분 검색
- Cypress
- useAppDispatch
- 무한 스크롤
- 결정 알고리즘
- recoil
- 투포인터
- dfs
- SSR
- CI/CD
- RTK Query
- Jest
Archives
- Today
- Total
짧은코딩
프로그래머스) 신규 아이디 추천 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/72410
내 풀이(맞음)
def solution(new_id):
from collections import deque
answer = ''
new_id = list(new_id.lower())
rst = deque()
i = 0
count = 0
for i in range(len(new_id)):
if (97 <= ord(new_id[i]) <= 122) or (48 <= ord(new_id[i]) <= 57)or new_id[i] == '-' or new_id[i] == '_':
rst.append(new_id[i])
count = 0
elif new_id[i] == '.':
count += 1
if count > 1:
count -= 0
continue
else:
rst.append(new_id[i])
if rst:
while len(rst) > 0:
if rst[0] == '.':
rst.popleft()
elif rst[-1] == '.':
rst.pop()
else:
break
if len(rst) > 15:
for i in range(15):
if i == 14 and rst[i] == '.':
break
answer += rst[i]
elif len(rst) <= 2:
if rst:
t = rst[-1]
else:
t = 'a'
for i in rst:
answer += i
while len(answer) < 3:
answer += t
else:
for i in rst:
answer += i
return answer
덱을 활용했다. 1단계는 lower() 함수로 해결을 했고, 2단계는 아스키 코드로 해결을 했고, 3단계는 count로 개수를 체크하여 해결했다. 4단계는 덱의 특성을 이용해 처음과 끝이 '.'이면 아닐때 까지 삭제를 해줬다. 5단계는 15개 이상이면 15개까지 answer에 넣어주고 만약 rst의 마지막이 '.'이면 break로 끝내줬다. 그리고 2개 이하면 rst가 있는 경우 t = rst의 마지막 문자이고 rst가 없으면 t는 'a'이다. 그래서 answer가 3이 될 때 까지 추가해줬다. 다른 경우에 대해서는 그냥 answer에 rst를 추가했다.
반응형
'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글
프로그래머스) 오픈채팅방 (0) | 2022.03.29 |
---|---|
프로그래머스) 크레인 인형뽑기 게임 (0) | 2022.03.27 |
프로그래머스) 로또의 최고 순위와 최저 순위 (0) | 2022.03.25 |
프로그래머스) 신고 결과 받기 (0) | 2022.03.25 |
1935 후위 표기식2 (0) | 2022.03.24 |
Comments