문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number return
"01033334444" "***4444"
"027778888" "*****8888"
public class Solution {
public String solution(String phone_number) {
// phone_number 배열의 길이를 구한다.
String[] strArr = phone_number.split("");
int strArrSize = strArr.length;
char[] startCharArr = new char[strArrSize - 4];
for(int i = 0; i < startCharArr.length; i++){
startCharArr[i] = '*';
}
char[] endCharArr = new char[4];
for(int i = strArrSize-4,j= 0; i < strArrSize; i++, j++){
endCharArr[j] = phone_number.charAt(i);
}
StringBuilder sb = new StringBuilder();
sb.append(startCharArr);
sb.append(endCharArr);
String answer = sb.toString();
return answer;
}
}

코드 분석 및 개선
기존 코드의 문제점:
- 불필요한 배열 생성:
startCharArr
과endCharArr
배열을 생성하는 과정이 불필요합니다. - 반복문 사용: 두 개의 반복문을 사용하여 문자를 복사하는 것이 비효율적입니다.
개선된 코드:
public class Solution {
public String solution(String phone_number) {
int length = phone_number.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length - 4; i++) {
sb.append("*");
}
sb.append(phone_number.substring(length - 4));
return sb.toString();
}
}

개선 사항:
- 단일 반복문 사용:
for
루프를 하나만 사용하여 문자를 복사합니다. StringBuilder.append()
활용:StringBuilder
의append()
메서드를 사용하여 문자를 효율적으로 추가합니다.substring()
활용: 마지막 4자리를 추출하는 데substring()
메서드를 사용하여 코드를 간결하게 합니다.
시간 복잡도 분석:
- 기존 코드: O(n) (n은 문자열 길이)
- 개선된 코드: O(n)
결론:
개선된 코드는 불필요한 배열 생성과 반복문을 줄여 시간 복잡도를 유지하면서 코드의 가독성과 효율성을 향상시켰습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 가장 가까운 같은 글자 (0) | 2024.10.16 |
---|---|
[프로그래머스] 시저암호 (0) | 2024.10.16 |
[프로그래머스] 음양 더하기 (1) | 2024.10.14 |
[프로그래머스] 콜라츠 추측 (0) | 2024.10.14 |
[프로그래머스] 두 정수 사이의 합 (2) | 2024.10.14 |