[연습문제] 핸드폰 번호 가리기
2024. 11. 30. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12948
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
| phone_number | return |
| "01033334444" | "*******4444" |
| "027778888" | "*****8888" |
주어진 전화번호의 마지막 4자리를 제외하고 모두 '*'로 마스킹한 값을 반환하는 문제입니다.
제가 생각한 방법은 두 가지입니다.
1. 반복문을 사용해 마지막 4자리 전까지 *로 값을 설정한다.
2. 정규식을 사용해 마지막 4자리 전까지 *로 값을 설정한다.
C언어에서는 첫 번째 방법을, 파이썬에서는 두 번째 방법을 사용해 문제를 풀어보겠습니다.
정답 코드를 작성해보겠습니다.
1. C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(const char* phone_number) {
// answer을 동적 할당합니다.
int pn_size = strlen(phone_number);
char* answer = (char*)malloc(sizeof(char) * (pn_size + 1));
// answer에 phone_number을 복사합니다.
strcpy(answer, phone_number);
// 4자리를 제외한 나머지 숫자를 전부 *으로 치환합니다.
for (int i = 0; i < pn_size - 4; i++) {
answer[i] = '*';
}
return answer;
}
strcpy를 사용해 answer에 phone_number 문자열을 모두 가져온 뒤, 4번째 전까지를 *로 마스킹해주었습니다.
2. 파이썬
import re
# solution = lambda x: re.sub(r'\d(?=\d{4})', '*', x)
def solution(phone_number):
return re.sub(r'\d(?=\d{4})', '*', phone_number)
정규식을 사용하기 위해 re (regex) 패키지를 임포트한 뒤, sub 함수를 사용해 마지막 4자리 전까의 모든 숫자를 *로 마스킹해주었습니다.
'입문문제' 카테고리의 다른 글
| [연습문제] x만큼 간격이 있는 n개의 숫자 (1) | 2024.12.03 |
|---|---|
| [연습문제] 행렬의 덧셈 (0) | 2024.12.01 |
| [연습문제] 하샤드 수 (1) | 2024.11.29 |
| [연습문제] 평균 구하기 (0) | 2024.11.27 |
| [연습문제] 콜라츠 추측 (0) | 2024.11.24 |