Home PS) 문자열 다루기 기본
Post
Cancel

PS) 문자열 다루기 기본

출처
: Programmers

문제

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

(생략)

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import re
def solution(s):

    p = re.compile("^[0-9]{4,4}$|^[0-9]{6,6}$").match(s)
    try:
        res = p.group()
    except:
        res = None
    if (res == s):
        answer = True
    else:
        answer = False

    return answer

정규식을 적용해보고 싶어서 풀었다.
문자열 s의 길이가 4 혹은 6이어야 해서
or을 뜻하는 |를 사용하여
{4,4}{6, 6}을 합쳤고,
숫자로만 구성돼있어야 해서 [0-9]
^, $를 통해 앞뒤까지 매칭되도록 했다.



다른 사람들의 풀이

1
2
3
def alpha_string46(s):
    import re
    return bool(re.match("^(\d{4}|\d{6})$", s))

(출처: 프로그래머스 스쿨 다른사람 풀이)

당연히 이미 과거에 정규식으로 푼 사람들이 여럿 있었다.
정규식을 어떻게 더 압축적으로 쓸 수 있는지 배우고 간다.

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

(출처: 프로그래머스 스쿨 다른사람 풀이)

숫자로만 구성돼있어야 한다는 조건에 의해
int(s)로 필터링을 할 수 있고,
이때, 에러가 발생하는 경우는
exceptFalse 처리를 해주었다.
기가 막힌 풀이인 것 같다.

Contents