알고리즘/알고리즘 풀이
프로그래머스_핸드폰 번호 가리기 JAVA
데부한
2025. 1. 27. 04:43
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이번 문제는 '핸드폰 번호 가리기' 문제다.
과거에 풀었던 문제라 과거 코드가 남아있었다.
과거 코드
class Solution {
public String solution(String phone_number) {
String answer = "";
int len = phone_number.length();
int numberLen = len - 4;
answer = phone_number.substring(0, numberLen);
String number = phone_number.substring(numberLen, len);
answer = answer.replaceAll("[0-9]", "*");
return answer+number;
}
}
음.. 해석해 보자면 핸드폰 번호 문자열의 총길이에서 4를 뺀 나머지 값을 구하고...
substring으로 -4한 길이 값까지 자르고, 또 -4한 값에서 마지막 문자열까지 구한 다음에..
answer에 replaceAll()을 사용해서 *로 바꾼 다음에 *문자열과 맨 마지막 번호 문자열을 더한 ... 그런 해괴망측한 코드이다.
정규식을 이용해서 풀이해보고 싶었는데 정규식 기호들의 설명만 봐서는 도저히 정규식을 완성할 수 없었다.....

그래서 챗GPT에게 도움을 청했더니 자세히 알려줬다.
챗GPT가 알려준 기호를 봐도 이해가 가질 않아서 자세한 설명을 부탁했다.
- dot(.)
- 의미
- 모든 단일 문자와 매치
- ex) "abc"에서 .는 a, b, c 각각과 매치
- 제한
- 기본적으로 개행 문자(\n)와는 매치되지 않음
- 의미
- (?=...)
- 의미
- 긍정적 전방 탐색
현재 위치에서 뒤쪽으로 4개의 문자가 존재하는 경우만 조건을 만족함 - (?=.{4})는 매칭 과정에서 뒤에 정확히 4개의 문자가 있는지 확인
- 조건만 검사하며, 실제 매칭에는 포함되지 않음
- 긍정적 전방 탐색
- 의미
- .(?=.{4})
- 해석
- 현재 위치에서 문자 하나(.)를 매칭하되, 이 문자의 뒤쪽에 최소 4개의 문자가 존재해야 한다는 조건을 만족하는 경우에만 매칭
- 즉, 뒤쪽에 최소 4개의 문자가 남아있는 경우의 문자만 매칭
- 해석
매칭 과정:
- 첫 번째 문자 '0':
- 뒤에 "1012345678" → 10개의 문자가 남아 있으므로 조건 만족. 매칭.
- 두 번째 문자 '1':
- 뒤에 "012345678" → 9개의 문자가 남아 있으므로 조건 만족. 매칭.
- 세 번째 문자 '0':
- 뒤에 "12345678" → 8개의 문자가 남아 있으므로 조건 만족. 매칭.
- 네 번째 문자 '1':
- 뒤에 "2345678" → 7개의 문자가 남아 있으므로 조건 만족. 매칭.
- ...
- 마지막에서 네 번째 문자 '5':
- 뒤에 "678" → 3개의 문자가 남아 있어 조건을 만족하지 않음. 매칭되지 않음.
- 마지막 세 문자 '6', '7', '8'도 조건을 만족하지 않음.
현재 코드
class Solution {
public String solution(String phone_number) {
phone_number = phone_number.replaceAll(".(?=.{4})", "*");
return phone_number;
}
}
정규식은 기호를 사용하는만큼 어렵다...
자주 사용하지 않은 패턴을 만들어내는게 쉽지 않구만.. 그래도 어렵다고 안쓰면 고여버리니
어려워도 자주 연습해서 쓰다보면 익숙해지겠지.
오늘도 재밌는 코딩~!
반응형