JSITCLUB
파이썬 - 프로그래머스 - 핸드폰 번호 가리기 본문
프로그래머스 level 1
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
-
s는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number | return |
"01033334444" | "*******4444" |
"027778888" | "*****8888" |
코딩테스트 연습 - 핸드폰 번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자
programmers.co.kr
풀이 및 코드 |
문제요약
문자열의 마지막 네자리 빼고 * 로 바꾸기
문제해설
이 문제을 요약해 보니 우선 '문자열', '위치' 같은 것들이 필요 하겠네요..
그런데 먼저 기억 할 것이 있습니다. 파이썬에서 문자열은 인덱스를 사용하여 특정 위치를 바꿀수 없습니다.
다시 말해
a="JSITCLUB"
a[0]="F"
와 같이 바꿀 수 없습니다.
이렇게 바꿔야 할때는 a="FSITCLUB" 또는 a="F" + a[1:] 와 같이 a를 다시 만들어 주어야 합니다.
그래서 종종 이런 문제를 사용하기 편하다는 이유로 리스트를 사용하는 분들이 계시는데, 별로 좋은 습관은 아닌것 같습니다. 조금 어려워도 문자열형태를 사용하시기 바랍니다.
그럼 문제로 돌아가서 위의 문제는 어떻게 풀까요?
이 문제도 항상 했던것 처럼 반복문으로 한글자씩 불러와서 글자의 위치가 뒤의 4글자에 해당하면 글자를, 아니면 *을 만들어 주면 됩니다.
위치가 필요하니 for문을 사용해야 겠죠.
(자세한 설명은 "서울에서 김서방 찾기"(https://jsitclub.tistory.com/29)를 참조하세요.)
정리하면
for i in range(len(phone_number)):
if i 가 마지막 4번째 보다 작다면
print("*")
else:
print(phone_number[i])
그럼 "마지막 4번째 보다 작다면"은 어떻게 표현 할까?
이럴때는 몇가지 예들을 써보고 규칙을 찾는것이 좋아요
만약 번호가 "021239876" 이라면 "02123" 즉 인덱스 0번째 ~ 4번째가 되겠죠
번호 | "0" | "2" | "1" | "2" | "3" | "9" | "8" | "7" | "6" |
인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
또 만약 번호가 "01011235577" 이라면 0번째~ 6번째 를 남겨야 합니다.
여기서 우리는 남겨야 할 위치가 길이에 따라 달라지고, 그 위치는 (총길이 - 4) 보다 작다는 것을 알 수 있습니다.
for i in range(len(phone_number)):
if i < len(phone_number)-4 :
print("*")
else:
print(phone_number[i])
그럼 이제 이 출력 된 내용을 변수에 넣어 한번에 출력 하면 완성됩니다.
결과코드
def solution(phone_number):
result=""
for i in range(len(phone_number)):
if i < len(phone_number)-4 :
result=result+"*"
else:
result=result+phone_number[i]
return result
문자열의 연산과 슬라이싱을 사용하면 좀더 간단하게 해결할 수 있습니다.
def solution(phone_number):
return '*'*(len(phone_number)-4)+phone_number[-4:]
'파이썬 > 문제풀이' 카테고리의 다른 글
파이썬 - 프로그래머스- 이상한 문자 만들기 (0) | 2020.07.21 |
---|---|
파이썬 - 프로그래머스 - 나누어 떨어지는 숫자 배열 (0) | 2020.07.15 |
파이썬 - 프로그래머스 - 문자열 다루기 기본 (0) | 2020.07.06 |
파이썬 - 프로그래머스 - 두 정수 사이의 합 (0) | 2020.06.10 |
파이썬 - 프로그래머스 - 평균 구하기 (0) | 2020.05.26 |