파이문

Valid Phone Number 본문

문제 풀이/codewars

Valid Phone Number

민Z 2016. 4. 10. 22:03

Valid Phone Number


입력 받은 문자열이 핸드폰 번호라고 판단할 수 있는지에 관한 문제였습니다.

"지역번호 앞 번호-뒷 번호" 순이면 옳다고 판단할 수 있습니다. (단, 문제에도 적혀 있듯이 지역번호 다음에 오는 닫힌 괄호 뒤에 띄어쓰기가 꼭 있어야 합니다.)


어렵지 않게 그냥 쉽게 생각해서 풀기로 하였습니다.

띄어쓰기를 구분으로 지역번호와 전화번호로 나누어지고 이 때 길이가 2여야 하며 

전화번호는 다시 하이픈을 기준으로 길이가 2가 된다면 옳은 전화번호로, 판단하기로 하였습니다.


하지만 에러가 나더군요.

생각해보니 하이픈이 숫자 맨 앞에 오는 경우도 단순히 길이를 2로 판단해서 True를 리턴한다는 것을 알았습니다.

띄어쓰기도 마찬가지였습니다.


(예제 입력 값에 알파벳은 들어가지 않는다고 가정해서 이 부분은 제외했었습니다.)


그래서 어떻게 할까 고민하다가 이미 오늘 오후에 풀었던 백준온라인 저지 문제를 엄청난 하드코딩으로 풀어서, 이번에는 공부좀 할겸 정규 표현식을 써보기로 했습니다.


맞게 했다고 생각하는데 자꾸 에러가 나길래 확인해보니 아마 예제로 되는 입력 값에 알파벳이 섞여 있는게 있나보더군요. 전 아예 입력에 알파벳이 들어가지 않는 줄 알았거든요.


저처럼 계속 에러가 난다면


1) (지역번호) 뒤에 띄어쓰기가 있어야 함

2) 번호 안에 알파벳이 들어가는 입력 값이 있음


등을 확인해보세요.


저는 2번의 경우였구요.


혹시 모르니 테스트 코드를 좀 써놓겠습니다.

class Test(unittest.TestCase):
    def test(self):
        self.assertEqual(validPhoneNumber("(123 )456-7890"), False)
        self.assertEqual(validPhoneNumber("(123) 456-7890"), True)
        self.assertEqual(validPhoneNumber("(123)456-7890"), False)
        self.assertEqual(validPhoneNumber("(123) 4567890"), False)
        self.assertEqual(validPhoneNumber("(123)4567890"), False)
        self.assertEqual(validPhoneNumber("(000) -4567890"), False)
        self.assertEqual(validPhoneNumber("(000) 456-780aa"), False)

코드는 아래처럼 작성하였습니다.

import re

def validPhoneNumber(phoneNumber):
    if re.search(r"^\(\d+\) \d{1,4}-\d{1,4}$", phoneNumber):
        return True
    else:
        return False

정규식 초보라서 좀 난잡합니당 ㅠㅠ

'문제 풀이 > codewars' 카테고리의 다른 글

Triangle number check  (0) 2016.04.13
Consecutive strings  (0) 2016.04.10
Replace With Alphabet Position  (0) 2016.04.02
Find The Parity Outlier  (0) 2016.04.02
Comments