본문 바로가기

프로그래머스

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한 조건

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

입출력 예

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

 

나의 풀이

문자 길이를 파악하여 substring을 사용하여 문자를 자른 뒤 문자를 합칠 생각을 하였다.

class Solution {
    public String solution(String phone_number) {
        String answer = "";
        String star = "";

        int len = phone_number.length()-4;

        answer = phone_number.substring(len);

        for(int i=0;i<len;i++){
            star += "*";
        }

        answer = star + answer;

        return answer;
    }
}

 

다른 사람의 풀이

생각보다 엄청 간단하게 풀려있으며 전혀 이런 생각을 하지 못하였다.

class Solution {
  public String solution(String phone_number) {
    return phone_number.replaceAll(".(?=.{4})", "*");
  }
}

replaceAll(String regex, String replacement) 함수는 대상 문자열을 원하는 문자 값으로 변환하는 함수이다.(regex는 변환하고자 하는 대상이 될 문자열, replacement는 변환할 문자 값이다.)
. : 개행 문자를 제외한 모든 단일 문자와 대응. 예) /.n/ : on, in 가능, nav 불가능
x(?=y) : 오직 y가 뒤따라오는 x에만 대응
{n,m} : n과 m은 양의 정수이고 n<=m을 만족해야 한다. 앞 문자가 최소 n개, 최대 m개가 나타내는 부분에 대응. m이 생략된다면 m은 무한대이다.

그래서 뒤에 숫자 4개를 제외하고 *로 변환한다.

💡 replace() 함수와 replaceAll() 함수의 차이는 정규표현식이 가능한 replaceAll()과 정규표현식이 불가능한 replace()이다.



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

 

코딩테스트 연습 - 핸드폰 번호 가리기

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자

programmers.co.kr

 

개발의 각궁

Spring | Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Mybatis | JPA | Angular.js | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend