프로그래머스>핸드폰 번호 가리기(java)

카초·2023년 9월 17일

//개인공부기록용

프로그래머스>Lv.1>코딩테스트 연습>연습문제>핸드폰 번호 가리기


문제 설명

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

제한 조건

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

입출력 예

phone_number	return
"01033334444"	"*******4444"
"027778888"	    "*****8888"

[코드1]

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

char[] answer = phone_number.toCharArray();

// 특정 인덱스의 값을 '*'로 변경하기 위해서 문자열을 문자 배열로 변환한다.
// phone_number.charAt(i)='*'; 을 쓰지 않고 굳이 문자열을 문자 배열로 변환하는 이유는, 문자열은 불변형이라 특정 인덱스의 값을 바로 수정할 수 없기 때문이다.

return String.valueOf(answer);

// 필요한 부분을 '*'로 대체한 다음, 다시 문자열로 변환하여 반환한다.
// return answer.toString(); 은 불가하다. toString()은 객체를 문자열로 변환하는 메서드이기 때문이다.
// return new String(answer); 는 가능하다. 하지만 오직 char[ ]만 문자열로 바꿀 수 있어서 평소 사용하기에 String.valueOf()가 훨씬 유연하다.


[코드2]

class Solution {
    public String solution(String phone_number) {
        StringBuilder answerBuilder = new StringBuilder(phone_number); // 문자열을 StringBuilder로 변환
        int num = phone_number.length();
        
        for (int i = 0; i < num - 4; i++) {
            answerBuilder.setCharAt(i,'*'); // 문자열 중간의 문자를 '*'로 대체
        }
        
        String answer = answerBuilder.toString(); // StringBuilder를 문자열로 변환하여 저장
        
        return answer; // 수정된 문자열 반환
    }
}
  1. StringBulider로 가변 문자열 클래스를 만들고,
  2. set.CharAt(i, '*')로 문자열 중간 문자를 '*'로 대체한 후
  3. toString()으로 다시 문자열로 변환하는 방법도 있다.

0개의 댓글