반응형
문제설명
https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
사고과정
- 하.. 카카오 블라인드 문제는 레벨 1도 매우 까다롭다..증말.. 시간을 재서 풀지는 않았는데 오래걸리더라도 기어코 풀어냈다..
- 1단계는 매우 쉽게 lower() 로 구현하면 된다
- 2단계는 replace 함수가 기본적으로 inplace가 안되기 때문에 무조건 새로운 변수 또는 기존 변수에 재할당시켜주어야 한다.. 이것때문에 또 시간 걸림..
- 3단계가 시간이 가장 많이걸렸는데.. 연속적인 2개이상 . 마침표가 나오게 되면 한개의 마침표(.)로 치환해주어야 했다. 예전에 풀어본 괄호문제 유형이랑 비슷한 것 같아서 처음에 스택으로 구현하자고 머리를 쥐어싸매면서 while 문? for 문? 에서 매우 갈등했다. 그러다가 스택에 문자열을 하나씩 for loop로 넣으면서 마침표가 등장할 때는 스택에 마침표가 있는지 없는지 확인하면서 구현에 성공했다!
- 4단계, 5단계는 한번에 수행했다. 단, 만약 new_id가 . 마침표 1개만 존재할 때 문자열을 담은 리스트가 비어버리기 때문에 그 사이에 문자열 담은 리스트가 비어잇는지 확인하는 조건을 사이에 무조건 추가해야 한다. 안그러면 그 뒤의 조건인 인덱스 -1을 참조하라는 것에서 out of range index 에러가 발생한다.
- 6단계는 비교적 쉬웠다. 그런데 문제를 또 대충읽었는지.. 6단계에서 15개 문자열 짜르고 마지막에 . 마침표 붙어있으면 제거하라는 걸 처음에 못봤다..
- 7단계는 while 문을 사용해서 잘 구현!
풀이
def solution(new_id):
# 1단계 - 모두 소문자로 치환
new_id = new_id.lower()
# 2단계 - 소문자, 특정 문자 아닌 것들 제거
mark = ['-', '_', '.']
for x in new_id:
if x.isalnum():
continue
if x not in mark:
new_id = new_id.replace(x, '')
# 3단계
stack = []
for x in new_id:
if x.isalnum() or x in mark[:-1]:
stack.append(x)
elif x == '.':
if not stack:
stack.append(x)
elif stack[-1] == '.':
continue
else:
stack.append(x)
new_id = stack
# 4단계, 5단계
answer = new_id
if answer[0] == '.':
answer = answer[1:]
if not answer:
answer.append('a')
elif answer[-1] == '.':
answer = answer[:-1]
# 6단계
if len(answer) >= 16:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7단계
while len(answer) <= 2:
answer.append(answer[-1])
return ''.join(answer)
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 (0) | 2021.12.07 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.12.06 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2021.12.06 |
[인프런] 회장뽑기 (0) | 2021.12.04 |
[인프런] 최대점수 구하기 (0) | 2021.12.04 |