프로그래머스_핸드폰 번호 가리기 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개의 문자가 남아있는 경우의 문자만 매칭

 

매칭 과정:

  1. 첫 번째 문자 '0':
    • 뒤에 "1012345678" → 10개의 문자가 남아 있으므로 조건 만족. 매칭.
  2. 두 번째 문자 '1':
    • 뒤에 "012345678" → 9개의 문자가 남아 있으므로 조건 만족. 매칭.
  3. 세 번째 문자 '0':
    • 뒤에 "12345678" → 8개의 문자가 남아 있으므로 조건 만족. 매칭.
  4. 네 번째 문자 '1':
    • 뒤에 "2345678" → 7개의 문자가 남아 있으므로 조건 만족. 매칭.
  5. ...
  6. 마지막에서 네 번째 문자 '5':
    • 뒤에 "678" → 3개의 문자가 남아 있어 조건을 만족하지 않음. 매칭되지 않음.
  7. 마지막 세 문자 '6', '7', '8'도 조건을 만족하지 않음.

 

현재 코드

class Solution {
    public String solution(String phone_number) {
        phone_number = phone_number.replaceAll(".(?=.{4})", "*");
        return phone_number;
    }
}

 

정규식은 기호를 사용하는만큼 어렵다...

자주 사용하지 않은 패턴을 만들어내는게 쉽지 않구만.. 그래도 어렵다고 안쓰면 고여버리니

어려워도 자주 연습해서 쓰다보면 익숙해지겠지.

 

오늘도 재밌는 코딩~!

반응형
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/알고리즘 풀이' 카테고리의 다른 글
  • 프로그래머스_3진법 뒤집기 JAVA
  • 프로그래머스_짝수와 홀수 JAVA
  • 프로그래머스_약수의 합 JAVA
  • 프로그래머스_최댓값과 최솟값 JAVA
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프론트엔드
    기출문제
    스프링부트
    토이프로젝트
    에러해결
    알고리즘
    개발자
    Spring
    SQL
    방통대
    JPA
    운영체제
    코딩테스트
    자바스크립트
    프로그래머스
    Java
    egov
    MSA
    react
    넥사크로
    QueryDSL
    SpringBoot를 이용한 RESTful Web Service 개발
    IT
    oracle
    springboot
    전자정부프레임워크
    토비의스프링부트
    RESTful
    인프런
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
프로그래머스_핸드폰 번호 가리기 JAVA
상단으로

티스토리툴바