프로그래머스 LV1 문자열 다루기 기본(연습문제)

프로그래머스 LV1 문자열 다루기 기본(연습문제)

2021, Apr 04    

프로그래머스 lv1 문자열 다루기 기본(연습문제)

문제 설명

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

제한 사항

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

입출력 예

s return
“a234” false
“1234” true

접근

len() 으로 길이가 4,6 인지 확인하고 숫자로 구성되어있는지 체크하면 됨. 굉장히 쉬운 문제


풀이

import numbers

def solution(s):
    return isinstance(s, numbers.Number) if (len(s) ==4 or len(s) ==6) else False

위 코드 설명
class numbers.Number : 숫자 계층의 최상위 클래스이다.
isinstance(x, Number) : 형에 상관없이 인자 x 가 숫자인지 확인 가능하다.
s의 길이가 4, 6인지 체크 후 아니라면 False. 맞다면 isinstance(x, Number)에서 숫자인지 체크하고 숫자라면 True, 아니면 False를 리턴한다.

# 다른 사람 풀이 1

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

위 코드 설명
isdigit() : 문자열 내에서 숫자가 있는지 찾아보고 있다면 True, 없다면 False를 리턴한다.
len(s) in (4, 6) 으로 불린을 했다. s의 길이가 4,6이 아니면 False를 리턴할 것이고 4,6이라면 숫자가 있는지를 찾는다.

참고 메소드 설명링크

# 다른 사람 풀이3
def alpha_string46(s):
    import re
    return bool(re.match("^(\d{4}|\d{6})$", s))


# 아래는 테스트로 출력해 보기 위한 코드입니다.
# print( alpha_string46("a234") )
print( alpha_string46("1234") )

이 분은 정규표현식으로 풀어버렸다.
\d{4}: 숫자가 4개 | 혹은 \d{6} 여섯개와 같으면 True 아니면 False

re.match(pattern, string, flags=0)
string 시작 부분에서 0개 이상의 문자가 정규식 pattern과 일치하면, 해당 일치 객체를 반환한다. 문자열이 패턴과 일치하지 않으면 None을 반환합니다; 이것은 길이가 0인 일치와는 다르다는 것에 유의하십시오.
MULTILINE 모드에서도, re.match()는 각 줄의 시작 부분이 아니라 문자열의 시작 부분에서만 일치함에 유의하십시오.
string의 모든 위치에서 일치를 찾으려면, 대신 search()를 사용하십시오 (search() 대 match()도 참조하십시오).


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges