문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 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})", "*") . : 임의의 문자 한 개 (?=.) : 뒤에서 임의의 문자를 제외하고 선택 {숫자} : 자릿수 |
'프로그래머스 > Lv. 1' 카테고리의 다른 글
[프로그래머스 코딩테스트] 서울에서 김서방 찾기(Java) (0) | 2023.04.07 |
---|---|
[프로그래머스 코딩테스트] 문자열을 정수로 바꾸기(Java) (0) | 2023.04.07 |
[프로그래머스 코딩테스트] 콜라츠 추측(Java) (0) | 2023.04.07 |
[프로그래머스 코딩테스트] 약수의 개수와 덧셈(Java) (0) | 2023.04.07 |
[프로그래머스 코딩테스트] 나누어 떨어지는 숫자 배열(Java) (0) | 2023.04.06 |