[연습문제] 핸드폰 번호 가리기

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