programming

프로그래머스 핸드폰 번호 가리기 파이썬 퀴즈 해설 풀이


by Kitle · 2020. 07. 18.



원본 퀴즈 출처 프로그래머스 : https://programmers.co.kr/learn/courses/30/lessons/12948


문제 설명

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

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


제한 조건

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

입출력 예

phone_number return

01033334444 *******4444

027778888 *****8888


현업에서도 실제 많이 푸는 마스킹(*)하기 입니다.

문자열 처리이므로 파이썬으로 아주 쉽고 재미있게 처리할 수 있습니다.

우선 코드 부터 보시죠.

def solution(phone_number):
answer = ''
masking_ren = len(phone_number)-4
answer = (masking_ren*'*')+phone_number[-4:]
return answer

masking_ren = len(phone_number)-4

우선 마스킹할 길이를 계산해야 합니다. s는 길이 4 이상, 20이하인 문자열이라고 했으니, 여기서는 최소 길이만 따져보겠습니다. 4자리면 0, 5자리면 1 이런식이 되겠죠? 전체 핸드폰 길이(문자열길이)에서 4를 빼주면 되겠습니다.
파이썬은 문자열 곱이 가능하므로 '*'*7 하면 *를 7번 출력해줍니다. 참 쉽죠?
전화번호가 11자리라면 마스킹할 자리는 7자리 + 마지막 전번 4자리 입니다.
전화번호 마지막 4자리는 phone_number[-4:] 로 접근하시면 됩니다.
그리고 마스킹된 문자열과 전화번호 마지막 4자리를 합쳐서 출력하면 됩니다.

다만 여기서 예외처리할 사항이 하나 있습니다. 마스킹할 자릿수가 하나도 없는 경우 잘 출력되는지 ' ' 빈 칸이나 error 등이 출력되지 않는지 봐야합니다. 입력값을 4444 등의 4자리로 넣고 해봅니다. 다행히 문자열곱은 곱할게 아무것도 없는 경우 자체적으로 잘 처리 되네요.

함수부를 보아하니 한줄로도 줄일 수 있겠습니다.
한줄로 줄여 볼게요.
def solution(phone_number):
answer = ((len(phone_number)-4)*'*')+phone_number[-4:]
return answer
이렇게 세줄로 줄일 수 있습니다.
return 문에 물론 한번에 써버리면 두줄로도 가능하겠죠.
너무 많이 줄이면 가독성에 저해가 되므로 적절한 수준에서 정리하면 될 것 같습니다.

이상 설명을 마칩니다.