문제 설명
프로그래머스 레벨 1의 문제로 2021 KAKAO BLIND RECRUITMENT 문제입니다. 주로 문자열 처리를 이룹니다.
문제가 생각보다 길어보이지만 가장 중요한건 아래 부분입니다.
ID를 입력받아 해당 단계를 거친 후 문자열을 반환하는 문제입니다.
풀이
usable_char = ['-', '_', '.']
def delete_exclude_char(id: str):
result = []
for c in id:
if c.isalpha() or c.isdigit():
result.append(c)
elif c in usable_char:
result.append(c)
return ''.join(result)
def merge_period(id: str):
stack = []
for i in range(len(id)):
if len(stack) > 0 and stack[-1] == '.' and id[i] == '.':
stack.pop()
stack.append(id[i])
if len(stack) > 0 and stack[0] == '.':
del stack[0]
if len(stack) > 0 and stack[-1] == '.':
del stack[-1]
return ''.join(stack)
def solution(new_id: str):
# 1단계
new_id = new_id.lower()
# 2단계
new_id = delete_exclude_char(new_id)
# 3,4단계
new_id = merge_period(new_id)
# 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 len(new_id) <= 2:
new_id = new_id + new_id[-1]
return new_id
간단설명
각 단계별로 메소드 혹은 코드를 짜서 해결하였습니다. 각각의 단계를 설명하도록 하겠습니다.
1단계new_id.lower()
메소드로 모든 알파벳을 소문자로 변경합니다.
2단계delete_exclude_char()
라는 함수를 만들어 사용했습니다.
각각의 문자가 알파벳, 숫자 혹은 사용가능한 문자가 아닐경우 해당 문자를 뺀 문자열을 만들어 반환합니다.
3, 4단계merge_period()
라는 함수를 만들어 사용했습니다.
연속한 마침표를 확인하기 위해 stack 자료구조를 이용했습니다. 만약 .
이 연속될 경우 stack.pop()
후 넣어줍니다.
문자열의 가장 앞, 뒤에 마침표가 위치한다면 제거해줍니다.
5단계
만약 빈 문자열이라면 "a"
를 대입합니다.
6단계
문자열의 길이가 16자 이상이라면 문자열 슬라이싱을 통해 문자열을 잘라줍니다.
7단계
문자열의 길이가 2자 이하라면 3자가 되도록 while
문을 통해 마지막 문자를 붙여줍니다.
'개발 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 카펫 (0) | 2021.03.22 |
---|---|
[프로그래머스] (1차) 캐시 (0) | 2021.03.22 |
[프로그래머스] 올바른 괄호 (0) | 2021.02.26 |
[프로그래머스] 소수 찾기 (0) | 2021.01.31 |
[프로그래머스] 영어 끝말잇기 (0) | 2021.01.31 |