
프로그래머스 LV1 문자열 다루기 기본(연습문제)
프로그래머스 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