Code KATA/알고리즘 코드카타

[2024.12.28] 핸드폰 번호 가리기

iiblueblue 2024. 12. 27. 09:36

문제 설명

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

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

 

 

제한사항

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

 

 

입출력 예

phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"

 

 

문제 풀이

풀이 언어 : C++

#include <string>
#include <vector>

using namespace std;

string solution(string phone_number) {
    string answer = "";
    string replace_star="";
    
    // phone_number의 길이 -4 만큼의 별 만들기
    for(int i=0; i<phone_number.size()-4; i++)
    {
        replace_star+="*";
    }
    
    // phone_number 숫자 *로 대체하기
    answer=phone_number.replace(0, phone_number.size()-4, replace_star);
    
    return answer;
}

문제를 보자마자 string이 제공하는 함수들부터 찾아봤다. 그러다 replace라는 함수를 발견하였고 적극 활용해보도록 했다.

먼저 *부터 만들어주기로 한다. phone_number에서 뒤에 4자리를 제외한 나머지를 *로 바꿔야 하기 때문에 *문자열의 길이는 phone_number.size()-4이다. 반복문을 이용해서 *로 알맞은 길이의 문자열을 만들어주고 이를 replace_star이라는 문자열 변수를 만들어 저장하였다.

다음으로 replace 함수를 이용하여 앞 문자열을 *로 대체해주었다. 0번째 인덱스부터 phone_number.size()-4 개의 문자열을 만들어두었던 replace_star로 바꾸어 준다.

 

참고사항

s.replace(n, k, str) 함수는 n번째 인덱스부터 k개만큼 str문자열로 바꾸어주는 함수이다. 이때 str이 k개 만큼 생기는게 아니라 str은 한번만 들어간다. phone_number.replace(0, 7, "*") ; 이렇게 하면 결과값이 "*4444"이 나온다는 뜻이다.

string s = "1234";
s.replace(1, 2, "**"); // "1**4"

 

s.size()와 s.length()는 모두 문자열의 길이를 반환한다.

string s="456789";

s.length(); // 6
s.size(); // 6

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12948

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr