핸드폰 번호 가리기_Java

컴투루·2022년 4월 16일
0

프로그래머스 Lv.1

목록 보기
4/38

연습문제

🔥 핸드폰 번호 가리기 🔥


👀 문제

전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 * 으로 가린 문자열을 리턴하는 함수, solution을 완성하라.


✔️ 조건

phone_number의 길이는 4이상 20이하인 문자열


👩‍💻 입력

1) phone_number = "01033334444"
2) phone_number= "027778888"


🧙 출력

1) "*******4444"
2) "*****8888"


🙋‍♀️ 풀이

class Solution {
    public String solution(String phone_number) {
        String last = phone_number.substring(phone_number.length()-4,phone_number.length()); 
        
        String mid = phone_number.substring(0,phone_number.length()-4);
        String ch = "";
        
        for(int i=0;i<mid.length();i++){
            ch += mid.replace(mid,"*");    
        }
        return ch + last;
    }
}

1) substring을 이용해서 핸드폰번호 끝의 4자리를 last에 대입
2) substring을 이용해서 끝의 4자리를 제외한 핸드폰 번호를 mid에 대입
3) String ch 선언
4) * 로 변경해야하는 mid의 길이만큼 반복하면서 ch에 "*"대입
5) ch와 last를 합친 문자열 return

지금와서 생각해보면 ch += "*"로 해도 되는걸 왜 저렇게 했나 싶다.
원하는 결과가 나오기는 했지만 코드가 너무 지저분하고 좋은 코드가 아닌것 같다.


💬 다른 풀이

1. toCharArray()와 valueOf() 사용하기

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);
  }
}
  • toCharArray()
    - 문자열을 char형 배열로 바꿔줌
    - 반환되는 배열의 길이는 문자열의 길이와 같음
    - 주의 : 문자열의 공백 또한 인덱스에 포함됨
  • String.valueOf()
    - 괄호 안의 해당 객체를 String 객체로 변환

1) char형의 배열 ch에 phone_number.toCharArray() 대입
2) ch의 길이는 phone_number의 길이와 동일
3) 반복문을 ch.length -4만큼 돌게함 (핸드폰번호 뒤에 4자리는 변경하면 안됨)
4) ch의 i번째에 *를 대입
5) 배열인 ch를 String객체로 변환시켜서 return 함

2. 정규식 사용하기

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

. : 임의의 문자 한 개
(?=.) : 뒷쪽에 임의의 문자 한개를 제외하고 선택
{숫자} : 숫자만큼의 자릿수
.(?=.{4}) : 뒤쪽에서 임의의 문자 4개를 제외한 임의의 문자 한개 선택

따라서 뒷쪽의 문자 4개를 제외한 임의의 문자 한개를 선택해서 *으로 replace하고 그 값을 return


👏 마무리

옛날에는 결과만 나오면 상관없었지만 이제는 깔끔하고 좋은 누구나 보고 이해할 수 있는 코드를 작성하고 싶다. 앞으로는 좀 더 고민해서 좋은 코드를 짤 수 있도록 노력할 것이다. 👊👩‍💻

profile
맘 먹으면 못할 게 없지

0개의 댓글