[프로그래머스]핸드폰 번호 가리기 (JAVA)

업데이트:

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때,
전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

  • 제한 조건

s는 길이 4 이상, 20이하인 문자열입니다.


  • 예시

image



풀이

class Solution {
    public String solution(String phone_number) {
        
        String answer = "";
        
        for(int i=0; i<phone_number.length(); i++){
            if(i<phone_number.length()-4){
                answer += "*";
            }else{
                answer += phone_number.charAt(i);
            }
        }
        return answer;
    }
}


  • 실행 결과

image

수행 시간이 너무 오래 걸린다..



다른 사람의 풀이(char->String)

class Solution {
  public String solution(String phone_number) {
     char[] ch = phone_number.toCharArray();
     for(int i = 0; i < ch.length - 4; i ++){
         ch[i] = '*';
     }
     return String.valueOf(ch);
  }
}


  • 실행 결과

image



String.toCharArray()로 문자열을 char형 배열로 바꾼다.
그 후 배열의 길이-4(마지막 4자리 숫자)보다 작은 경우 값을 ‘*‘로 변경한다.
마지막 return 시 String.valueOf()를 통해 String 타입으로 변경해 준다.

이 방법은 수행 시간이 매우 단축된다.

첫 번째 방법으로 풀 경우 문자열을 조합하는 데 시간이 많이 드는 건지, for문 안에 if문을 넣어줘서 시간이 많이 드는 건지 모르겠다.😰😰

풀이

class Solution {
    public String solution(String phone_number) {
        
        String answer = "";
        
        for(int i=0; i<phone_number.length()-4; i++){
            answer += "*";
        }

        answer += phone_number.substring(phone_number.length()-4);
        
        return answer;
    }
}


  • 실행 결과

image



위에 코드를 참고해서 for문의 반복 횟수를 줄이고 조건문을 없앴더니
수행 시간이 많이 단축됐다.😉
하지만 아직도 위에 코드보다 수행 시간이 오래 걸리는 것을 보면
아마 문자열 조합 작업에서 시간이 더 오래 소요되는 걸까..?
관련 자료를 한번 찾아봐야겠다.😢



다른 사람 풀이(정규식)

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


  • 실행 결과

image



정규식을 사용해서 한 줄로 코딩을 끝냈다..😰



댓글남기기