Python 공부기록

Python _ 핸드폰 번호 가리기

혜원89 2021. 2. 25. 17:25

문제 설명

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

제한 조건

  • s는 길이 4 이상, 20이하인 문자열입니다.

입출력 예

phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"

✅SOL_1

1
2
3
4
5
def solution(phone_number):
    answer = ''
    for i in range(0,len(phone_number)-4):
        answer += '*'
    return answer+phone_number[-4:]
cs

문자열로 입력된 핸드폰 번호를 뒤의 네자리를 제외하고 *로 바꾸어 출력해야한다. 값을 바꾼다기보단 입력된 번호의 길이에 4만큼 뺀 만큼 *을 작성하고 뒤에 입력된 번호의 뒤의 4자리를 추가하여 return하였다. 먼자 빈 문자열 answer을 선언하고 for문의 i를 0부터 입력된 번호의 길이에서 4만큼 작은 수까지 반복하여 answer에 *을 더해주었다. return에서 answer문자열에 입력된 번호의 뒤에서 4번째부터 끝까지 < phone_number[-4:] > 더해주었다.

이는 파이썬의 슬라이싱으로 문자열, 리스트, 튜플 등 연속적인 값이 있는 객체들의 일부분만 가져와 쓸때 유용하다.

슬라이싱은 인덱스로 값을 가져오는데,

a = 'Hello World!'

 

a[start:end]

와 같이 사용하여 값의 일부분만 가져올 수 있다. 

인덱스는 [ 0, 1, 2, 3, .. ]와 같이 증가하고 [ ..., -4 , -3, -2, -1 ] 와 같이 끝난다. 이때 맨 앞에서 부터 시작한다면 0을 생략하여 < a[:5] >와 같이 쓸 수 있고 마찬가지로 맨 끝까지 가져온다면 < a[6:] >와 같이 사용할 수 있다.

a[start:end:step]

또한 위와 같이 step만큼 이동하며 값을 가져올 수 있다. step값이 양수이면 start값 부터 오른쪽으로 step만큼 이동하여 값을 가져오고, step값이 음수이면 start값부터 왼쪽으로 step만큼 이동하여 값을 가져온다. < a[1::2] >와 같이 작성하면 인덱스 1의 값부터 3, 5, ..의 값을 가져온다. < a[3::-2] >이면 인덱스 3, 1의 값을 가져올 것이다. 또한 step을 < a[::-1] >와 같이 쓰면 전체를 거꾸로 가져오게 할 수 있다.

 

 

✅SOL_2

1
2
def solution(phone_number):
    return ('*'*(len(phone_number)-4))+phone_number[-4:]
cs

SOL_1의 코드를 아주 간단히 하면 이렇게 쓸 수 있다. 문자열에도 연산자를 쓸 수 있는 파이썬이라 *을 입력된 번호의 길이-4 만큼 곱하고 입력된 번호 뒤의 네자리를 더하여 바로 return할 수 있다. 필요없는 for문과 변수 선언을 줄일 수 있다.

'Python 공부기록' 카테고리의 다른 글

Python _ 평균구하기  (0) 2021.03.02
Python _ 행렬의 덧셈  (2) 2021.02.26
Python _ x만큼 간격이 있는 n개의 숫자  (0) 2021.02.24
Python3 _ 직사각형 별찍기  (0) 2021.02.23
Python 공부기록  (1) 2020.11.03