본문 바로가기

알고리즘/프로그래머스

[211217] 핸드폰 번호 가리기

class Solution {
    public String solution(String phone_number) {
        String str = phone_number.substring(0, phone_number.length() - 4);
        StringBuilder sb = new StringBuilder("");
        for(int i = 0; i < str.length(); i++){
            sb.append("*");
        }
        String answer = phone_number.replace(str,sb);
        
        return answer;
    }
}

20

리뷰 : substring 문자열 자르는 함수, length() 활용하면 뒷자리 제외한 갯수 셀 수 있으므로 원하는만큼 남기고 자를 수 있다. (01012345678 인 경우에는 앞에서부터 7자리까지 잘라도 되지만 010이 아닌 02로 시작하는 경우 불가능하다. 뒤에서부터 잘라야 함)

 

처음에는 sb 선언때부터 *을 지정했더니 sb.append("*") 할 때 별이 원하는 갯수보다 1개씩 더 찍혀서 for문 조건식을 str.length - 1 로 고친 결과, 채점할 때 하나의 케이스에서 틀렸다고 나왔다.

 

원인 -> 핸드폰 번호의 최소 범위가 길이 4 이상, 20이하 이기 때문이다.

 str 은 "*"로 지정할 문자열의 갯수인데 핸드폰 번호가 4자리인 경우에는 문자열의 수가 0이다. 그럼 for문 조건식이 i < -1 이 되어 문제가 발생한다.

해결 -> sb 선언 시 ""로 두고 *의 갯수를 처음부터 맞춰서 찍는다.

 

 

다른 풀이

toCharArray() 사용하면 문자열을 char 배열로 만들어 준다.

String.valueOf() 메소드에 매개변수로 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);
  }
}