프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 핸드폰 번호 가리기(Java)

Sigfriede 2023. 4. 7. 18:15

  문제 설명

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

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

 

  제한사항

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

 

  입출력 예

phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"
class Solution {
    public String solution(String phone_number) {
        String answer = phone_number.substring(0, phone_number.length() -4).replaceAll("[0-9]", "*") + phone_number.substring(phone_number.length() -4);
        return answer;
    }
}

  이 문제에서 눈여겨볼 부분은, phone_number의 총 길이가 몇이든, 뒷 4자리를 제외한 나머지 숫자를 전부 *로 가려야한다는 점입니다. 따라서 substring 메소드로 처음부터 마지막 4자리를 제외하고 잘라준 뒤, replaceAll 메소드를 사용하여 정규식으로 모든 숫자를 *로 바꾸었습니다. 이후, 마지막 4자리를 문자열 합치기를 통해 합쳐주었습니다.

  풀이 자체는 간단하지만 코드가 긴 탓에 가독성을 해칠 수 있으므로, 좋은 풀이라고는 볼 수 없을 것 같습니다. 그래서 정규식을 이용한 다른 풀이를 확인해보았습니다. substring을 쓰지 않고도 바꿀 수 있더라고요. 이렇게 정규식을 활용할 수도 있다니 조금 놀랍습니다. 마찬가지로 replaceAll을 사용하는 풀이입니다.

phone_number.replaceAll(".(?=.{4})", "*")

. : 임의의 문자 한 개
(?=.) : 뒤에서 임의의 문자를 제외하고 선택
{숫자} : 자릿수