문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 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
'알고리즘 > 문제풀이' 카테고리의 다른 글
[LeetCode] 13. Roman to Integer (Easy) 풀이 (0) | 2022.03.14 |
---|---|
[LeetCode] 9. Palindrome Number (Easy) 풀이 (2) | 2022.03.11 |
[LeetCode] 1. Two Sum (Easy) 풀이 (1) | 2022.03.11 |
[프로그래머스] 코딩테스트 연습 - 평균 구하기 Java, JavaScript (1) | 2021.08.25 |
[프로그래머스] 위클리챌린지 1주차 - 부족한 금액 계산하기 Java (0) | 2021.08.24 |