문제: https://school.programmers.co.kr/learn/courses/30/lessons/12948
✅ 내 풀이(최종코드)
```java
class Solution {
public String solution(String phone_number) {
String answer = "";
int phoneLength = phone_number.length();
answer = "*".repeat(phoneLength-4);
answer += phone_number.substring(phone_number.length()-4);
return answer;
}
}
❓ 처음엔 당연히 반복문을 사용했다. 하지만 주어진값이 최대 20자까지 되고, 문제가 간단하기 때문에
"마스킹('*') 처리만 하면 될 것 같은데 반복문을 꼭 돌려야 할까??"
라는 의문이 들어서 문자열을 대체하는 방법을 알아보았다.
replaceAll()과 replace() 메서드는 둘 다 문자열에서 특정 패턴을 찾아 다른 문자열로 대체하는 역할을 하지만 차이가 있다.
String str = "Hello, World!"; String replaced = str.replace("o", "\*");
System.out.println(replaced); // Hell\*, W\*rld!
String str = "Hello, World!";
String replaced = str.replace("o", "*");
System.out.println(replaced); // Hell*, W*rld!
따라서, replaceAll() 메서드는 정규 표현식을 사용하여 문자열을 대체하고 싶을 때 사용하며, replace() 메서드는 단순히 특정 문자 또는 문자열을 대체하고 싶을 때 사용한다.
해당 문제는 특정한 단어를 대체하는게 아니기 때문에 다른 방법을 알아보았다.
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;
}
}
substring() 메서드는 문자열에서 원하는 부분 문자열을 추출하는 데 사용된다.
이 문제에서는 뒤의 4자리만 기존값을 사용하고 나머지는 모두 마스킹처리를 진행하면 되기 때문에 substring()으로 필요한 부분만 추출해서 사용하는게 더 좋다고 생각한다.
String str = "Hello, World!";
String substr = str.substring(7);
System.out.println(substr); // "World!"
String str = "Hello, World!";
String substr = str.substring(0, 5);
System.out.println(substr); // "Hello"
콤마를 안찍으면 기입한 숫자부터 끝까지 출력
주의사항:
위의 사용 방법을 참고하여 substring() 메서드를 적절히 활용하여 원하는 부분 문자열을 추출할 수 있습니다.
✅다른풀이(1)
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();
앞 부분의 배열만 바꾸면 되는거라 바꾸고 스트링으로 다시 변환하기
✅다른풀이 (2-1)
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;
}
}
✅다른풀이 (2-2)
class Solution {
public String solution(String phone_number) {
String answer = "";
int phoneLength = phone_number.length();
answer = "*".repeat(phoneLength-4);
answer += phone_number.substring(phone_number.length()-4);
return answer;
}
}
풀이 2번에서는 두번 사용되는 String phone_number의 길이를 변수화 시키고,
.repeat()을 활용하여 phone_number의 자리수가 달라지더라도 (phoneLength-4)번만 마스킹 처리를 진행하게 만든다.