[프로그래머스-LV1] 신규 아이디 추천

아이엠강욱·2023년 5월 12일
0

코딩테스트

목록 보기
8/23

해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
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

위의 코드는 다른 사람의 코드를 한번 보고 직접 다시 작성해본 코드이다.

1. 대소문자 관련 + 알파벳/숫자 확인 관련 메서드

  • 문자열을 모두 대문자 또는 모두 소문자로 변경: lower() + upper()
  • 대문자인지 소문자인지 확인하는 메서드: isupper(), islower()
  • 숫자인지 확인하는 메서드: isdigit()
  • 문자열 구성이 알파벳 또는 한글인지 확인하는 메서드: isalpha()
    - 문자열에 공백, 기호 그리고 숫자가 있으면 False
  • 알파벳(한글) 또는 숫자인지 확인하는 메서드: isalnum()
    - 기호 또는 공백이 포함되어 있으면 False

2. 문자열에 특정 문자가 포함되어 있는지 확인

if word in ['-', '_']
if word in '-_'

위의 코드와 같이 배열로 작성해도 되고, 문자열 하나에 담아서 해도 가능하다.

3. 연속되는 문자열을 다른 문자로 대체해야 하는경우

여기서 조금 애를 많이 먹었다. 나는 2중 반복문을 사용해서 범위를 잡아버리려고 했는데 훨씬 간단한 방법이 있었다.

문제에서는 연속되는 마침표가 있는 경우에는 마침표 하나로 치환하라는 요구사항이 있었다.

while '..' in answer:

위와 같이 코드를 작성하게 되면 answer 문자열에 .. 문자열이 있는 동안 로직 수행 한다는 의미이고 마침표 하나로 치환해줘야 하기 때문에 replace 메서드를 사용하면 간단하게 해결 가능하다.

profile
블로그 이전했습니다!! https://dev-iamkanguk.tistory.com/ <<- 여기로 오세용!!

0개의 댓글