티스토리 뷰

728x90
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/12948

 

코딩테스트 연습 - 핸드폰 번호 가리기

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자

programmers.co.kr

 

 


 

<나의 풀이>

def solution(phone_number):

    answer = "*"*(len(phone_number)-4) + phone_number[-4:]
    return answer

 

파이썬 문자열의 연산사용하여 1분도 안되서 푼 문제.

대부분의 사람들이 다 나같이 풀었더라😅 

그 외에는 정규식으로 풀었는데,

정규식이란걸 처음 봐서 이번 기회에 학습하였다.

 

<다른 사람의 풀이>

import re

def hide_numbers(s):
    p = re.compile(r'\d(?=\d{4})')
    return p.sub("*", s, count = 0)

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : " + hide_numbers('01033334444'));
print("결과 : " + hide_numbers('027778888'));


# <배운점> 
# => 정규표현식에 대해 알 수 있었음


'''
< 더 알아보기 >
-----------------------------------------------------------------------

# 정규 표현식
=> 메타 문자 : 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
=> 메타 문자 종류 : . | ^ $ * + ? { } [ ] \ ( )

1) Dot .
- 줄바꿈 문자(\n)를 제외한 모든 문자와 매치됨
- re.DOTALL 옵션을 주면 \n도 매치 가능

2) OR |
- or과 동일한 의미
- ex) A|B : A 또는 B라는 의미

3) ^
- 문자열의 맨 처음과 일치함을 의미

4) $
- 문자열의 끝과 매치함을 의미

5) 반복 *
- *의 바로 앞에 있는 문자가 a부터 0까지 2억개(메모리제한 때문)까지 반복 가능

6) 반복 + 
- +는 최소 1번 이상 반복 될 때 사용
- 즉 *은 반복 횟수 0부터, +는 반복 횟수 1부터

7) ?
-무언가를 선택적으로 표시하는 것
- ex) home-?brew 는 homebrew 나 home-brew와 일치

8) {}
- 반복 한정자 중 하나
-{0,}은 *, {1,}은 +, {0,1}은 ?와 같음

9) 문자클래스 [ ] 
- 문자클래스를 만드는 메타문자
- [] 사이에는 어떤 문자나 메타 문자도 사용할 수 있음

10) \
- \의 다음에 특수 시퀀스를 알리는 다양한 문자가 올 수 잇음
- 특별한 의미를 제거하기 위해 앞에 \\ 나 \[를 사용할 수 잇있음

11) 그루핑 ( ) 
- 그룹을 만들어주는 메타 문자
- 검색 결과의 특정 부분만 출력할 수 있음

-----------------------------------------------------------------------

# re 모듈
=> regular expression의 약자로, 정규 표현식을 지원하기 위해 사용하는 모듈
=> 사용법 : import re

출처 : https://wikidocs.net/4308 , 파이썬 공식문서

-----------------------------------------------------------------------

# 코드 해석

# 정규식 컴파일 하기
p = re.compile(r'\d(?=\d{4})') 
=> re.compiler() : 패턴 객체 반환
=> \d : 숫자 0 ~ 9
=> () : 그루핑
=> ?= : 전방탐색
=> {4} : 앞의 그룹이 정확히 4번 나타나는 패턴과 일치시킴
    return p.sub("*", s, count = 0)

참고 문서 : https://jsikim1.tistory.com/83

-----------------------------------------------------------------------
'''
728x90
반응형
댓글