[문제설명]
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
[제한 조건]
[나의 풀이]
1차풀이
public class 핸드폰번호가리기 {
public String solution(String phone_number) {
String answer = "";
String decrypt = phone_number.substring(phone_number.length()-4, phone_number.length());
for (int i = 0; i < phone_number.length()-4 ; i++)
answer += "*";
answer += decrypt;
return answer;
}
public static void main(String[] args) {
핸드폰번호가리기 answer = new 핸드폰번호가리기();
String phone_number = "01033334444";
System.out.println(answer.solution(phone_number));
}
}
내가 1차로 풀어보았던 풀이이다.
로직은 간단하다.
문제를 읽어보면, 맨 뒷자리 4자리만 복호화된 상태로 놔두고, 나머지 자리들은 암호화하여 리턴해주면 끝이다.
따라서, 맨 뒷자리 4자리만 substring으로 슬라이싱 한뒤, 반목문을 돌려 나머지 자릿수에 맞게 *들을 붙여나갔다.
위의 코드로 잘 통과가 되었지만, 무언가 기분이 좋지만은 않았다.
특히 *을 붙여나가는 부분이 가장 맘에 안들었다.
기능대비 코드가 길다랄까..?😤 (파이썬에서는 한줄이면 될것을😭)
따라서, 저 for문을 줄일 수 있는 방법을 구글링을 해보았다.
그 결과...?
2차풀이
class Solution {
public String solution(String phone_number) {
String answer = "";
String encrypt = "*";
String num = phone_number.substring(phone_number.length()-4, phone_number.length());
answer += encrypt.repeat(phone_number.length()-4);
// for (int i = 0; i < phone_number.length()-4 ; i++)
// answer += "*";
answer += num;
System.out.println(answer);
return answer;
}
}
위 코드와 같이 작성해보았다.
기존 for문 부분은 주석처리를 해두었고, repeat함수를 이용하여 한줄로 *을 반복시켜 answer에 더해주었다.
(내 개인적인 생각이지만, 위의 코드가 더 간결하고 가독성이 좋아보인다.🤩)
매우매우 쉽고 간단한 문제였지만, 새로운 함수를 적용시켜보아서 만족스러운 문제이다. (이맛에 lv1 문제를 푸는거구나..)
아래는 채점결과이다.
repeat()
추가적으로 repeat()함수에 대해 부연설명을 하고자 한다.
repeat()는 자바11에서 새로 추가된 String 메서드이다.
주요기능들은 아래와 같다.
- 파라미터를 0으로 지정하면 빈 문자열을 반환한다.
- 파라미터를 음수로 지정하면 IllegalArgumentExceptionthrow 에러를 반환한다.
- 파라미터를 1로 지정하면 문자열을 그대로 반환한다.
- 만약 빈 문자열에 대해서 사용하면, 빈 문자열이 반환된다.
예시는 아래와 같다. (직접 해보자, 매우 유용하게 쓰일 것이다.)
public static void main(String[] args) {
System.out.println("*".repeat(10));
}
>> ********** //출력