갱스터하우스

[Python] Lv1.문자열 다루기 기본 본문

코테 문제/프로그래머스

[Python] Lv1.문자열 다루기 기본

승갱 2022. 4. 8. 00:56

https://programmers.co.kr/learn/courses/30/lessons/12918

 

 

 

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

제한조건

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

 

나의 접근방법 및 풀이

처음 문제를 읽었을 때, s의 길이 조건, 숫자로만 구성 확인을 보고 if문과 isdigit()으로 풀어야겠다고 생각했다.

먼저 if문으로 문자열의 길이가 4, 6일 때의 조건을 확인하고, 그다음 isdigit()을 이용해 해당 문자열이 숫자로 되어 있는지 확인하여 True 나 False를 return 한다. 

def solution(s):
    if len(s) == 4 or len(s) == 6:
        if s.isdigit():
            return True
        else:
            return False
    else:
        return False

 

<다른 풀이>

def alpha_string46(s):
    return s.isdigit() and len(s) in (4, 6)

먼저 문자열의 길이를 if문이 아니라 'len(s) in (4, 6)'으로 구현한 게 정말 깔끔해 보였다. 그리고 isdigit()을 사용할 건 알았지만, 문자열의 길이와 숫자로 구성 여부를 중첩 if문이 아니라 'and'로 구현한 게 깔끔하고 명쾌했다.

 

def alpha_string46(s):
    try:
        int(s)
    except:
        return False
    return len(s) == 4 or len(s) == 6

그리고 이런 방법도 있구나 한 풀이이다.

try문을 실행했을 때 s가 숫자로만 이루어졌다면 상관 없지만 ,'문자' 또는 '숫자+문자'라면 error가 발생해 except문의 코드를 실행, 즉 False를 return한다.

그리고 try 구문에서 성공했더라도 return문에서 문자열의 길이가 4와 6이 아니라면 except문의 False가 return 된다.

참 매력적이다!