Programmers Coding Quiz #16 핸드폰 번호 가리기

김기욱·2021년 2월 2일
0

코딩테스트

목록 보기
16/68
post-custom-banner

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.

전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한사항

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

입출력 예

phone_numberreturn
"01033334444""*******4444"

풀이

def solution(phone_number):
    for i, v in enumerate(phone_number):
        if i == len(phone_number) - 4:
            return phone_number
        phone_number = phone_number.replace(v, '*', 1)
  1. enumerate를 활용해 인덱스와 밸류를 동시에 얻는다.
  2. for문으로 순회하면서 하나씩 '*'로 바꿔준다. replace를 사용하면 몇개를 바꿀지 명시 안 할 경우 동일한 문자열을 모두 바꿔버린다. 그러므로 1개씩 바꾼다고 명시해준다.
  3. index가 마지막인덱스 -4에 도달하면 바꿔준 phone_number를 return

다른풀이

def hide_numbers(s):
    return "*"*(len(s)-4) + s[-4:]

감탄했습니다. 일일히 바꿔주는게 아니라 *을 필요한 길이(len-4)만큼 곱셈으로 생성해주고 [-4:]이라는 슬라이싱을 활용해 역순에서 4번째 숫자까지 잘라서 그대로 문자열 덧셈을 해줘버리는 깔끔 명쾌한 로직입니다.

보통 마이너스 인덱스는 [::-1] => 문자열/리스트 역순 뒤집기
[-1:] => 마지막 문자열, 리스트요소만 슬라이싱만 썼는데 [-4:]를 써서 뒤에서부터 네 글자를 슬라이싱하는걸 처음 봤습니다. 앞으로 슬라이싱 좀 더 연구해봐야겠네요~ 🥰

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.
post-custom-banner

0개의 댓글