본문 바로가기

문돌이 존버/프로그래밍 스터디

(프로그래머스 연습문제 풀이) 핸드폰 번호 가리기

반응형
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
s는 길이 4 이상, 20이하인 문자열입니다.

입출력 예
phone_number            return
"01033334444"        "*******4444"
"027778888"            "*****8888"
import re

def solution(phone_number):
    return re.sub(r'\d(?=\d{4})', '*', phone_number) # re.sub으로 기존 문자열을 원하는 패턴으로 변환

해당 문제는 딱 보면 slicing으로 풀어도 되는 문제다. 하지만 코드 상으로 더 간결하게 푸는 방법은 정규표현식을 사용하는 것이다. 문제에서 뒤의 4자리만 "*" 으로 변환하면 된다고 했기 때문에 정규표현식에서도 뒤의 4자리 숫자만 찾으면 된다.

위의 정규표현식을 설명하면 다음과 같다.

\d -> 숫자 [0-9]를 가리킨다.
(?=) -> 뒤에 나오는 문자열이 조건에 해당하는지 여부를 판단한다.
\d{4} -> 숫자 네 자리를 가리킨다.

결론적으로 처음에 숫자 1개가 등장하고, 그 뒤에 숫자 4개가 연속해서 오는지 확인하는 것이다. 아래는 정규표현식을 연습할 수 있는 사이트에서 확인한 결과다. 마지막 네 자리가 포함되지 않은 이유는 뒤에 4개의 숫자가 등장하지 않기 때문이다. 다시 말해 위의 정규표현식은 총 5개의 숫자가 연속해서 등장하는지를 살펴본다고 할 수 있다.

728x90
반응형