해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=python3
문제 해설은 따로 생략하고.. 이번 문제를 풀고 멘탈이 많이 나갔다.
코딩테스트 문제를 풀기 시작한지 얼마되지 않았지만 파이썬 문법을 너무 모르고 있어서 간단하게 작성할 수 있는 코드를 너무 비효율적이고 더럽게 코드를 작성한 거 같아서... 좀 현타가 왔다.
이 문제를 풀면서 몰랐거나 헷갈렸던 문법들 정리를 하고 포스팅을 마치려고 한다.
def solution(new_id):
answer = ''
# 1단계
new_id = new_id.lower()
# 2단계
for word in new_id:
if word.islower() or word.isdigit() or word in ['-', '_', '.']:
answer += word
# 3단계
while '..' in answer:
answer = answer.replace('..', '.')
# 4단계
if answer[0] == '.' and len(answer) > 1:
answer = answer[1:]
if answer[-1] == '.':
answer = answer[:-1]
# 5단계
if len(answer) == 0:
answer = 'a'
# 6단계
if len(answer) >= 16:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7단계
while len(answer) < 3:
answer += answer[-1]
return answer
위의 코드는 다른 사람의 코드를 한번 보고 직접 다시 작성해본 코드이다.
문자열을 모두 대문자 또는 모두 소문자로 변경
: lower() + upper()
대문자인지 소문자인지 확인하는 메서드
: isupper(), islower()
숫자인지 확인하는 메서드
: isdigit()
문자열 구성이 알파벳 또는 한글인지 확인하는 메서드
: isalpha()
알파벳(한글) 또는 숫자인지 확인하는 메서드
: isalnum()
if word in ['-', '_']
if word in '-_'
위의 코드와 같이 배열로 작성해도 되고, 문자열 하나에 담아서 해도 가능하다.
여기서 조금 애를 많이 먹었다. 나는 2중 반복문을 사용해서 범위를 잡아버리려고 했는데 훨씬 간단한 방법이 있었다.
문제에서는 연속되는 마침표가 있는 경우에는 마침표 하나로 치환하라는 요구사항이 있었다.
while '..' in answer:
위와 같이 코드를 작성하게 되면 answer 문자열에 .. 문자열이 있는 동안 로직 수행
한다는 의미이고 마침표 하나로 치환해줘야 하기 때문에 replace
메서드를 사용하면 간단하게 해결 가능하다.