핸드폰 번호 가리기
다른 방법으로 더 쉽게 풀 수 있지만
정규식을 사용하여 풀어보자
정규 표현식
String pattern = "^[0-9]*$";
정규 표현식으로 0~9까지의 숫자를 나타내는 방식이다.
정규 표현식으로 특정 문자를 "*"로 바꿔볼 것이다.
이 부분이 핵심이다.
for (int i = 0; i<pnl-4; i++){
answer += String.valueOf(phone_number.charAt(i)).replaceAll(pattern, "*");
}
정규표현식의 replaceAll()은 String타입을 받는다.
하지만 String타입을 바로 받는다면 전체문자열을 숫자로 인식하여
"*"하나만 나오게 된다.
따라서 문자열 하나하나를 "*"로 바꾸기 위해
charAt()로 char형으로 변환한 다음
valueOf()로 String형으로 변환한 후
replaceAll()을 하면 된다.
class Solution {
public String solution(String phone_number) {
String pattern = "^[0-9]*$";
String answer = "";
int pnl = phone_number.length();
if (pnl >4) {
for (int i = 0; i<pnl-4; i++){
answer += String.valueOf(phone_number.charAt(i)).replaceAll(pattern, "*");
}
}
answer += phone_number.substring(pnl-4, pnl);
return answer;
}
}
다른 사람의 코드를 보니 더 빠르고 간결하다.
class Solution {
public String solution(String phone_number) {
return phone_number.replaceAll(".(?=.{4})", "*");
}
}
정규 표현식에 대한 이해가 좋다면 이렇게 간단한 코드도
짤 수 있나 보다.
'알고리즘 탐구' 카테고리의 다른 글
백준) (자바)4836 춤 (2) | 2023.05.02 |
---|---|
프로그래머스) (자바) 직사각형 별 찍기 (0) | 2023.04.09 |
백준) (자바)1935 후위 표기식 2 (0) | 2023.04.04 |
알고리즘) 유클리드 호제법 (0) | 2023.03.16 |
알고리즘) 동적 계획법 (0) | 2023.03.15 |