티스토리 뷰

728x90
🌌프로그래머스 핸드폰 번호 가리기 - 자바(java)

 

📚 문제 설명

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


👨🏻‍💻 제한 조건

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


📖 예시

💻 입력 /출력 

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

 


💻 작성 코드

class Solution {
    public String solution(String phone_number) {
    StringBuilder answer = new StringBuilder(phone_number);

    for(int i=0; i < phone_number.length()-4; i++){
        answer.setCharAt(i, '*');
    }                               
    return answer.toString();
    }
}

🗝️ 해석 

  • length() -4 -> 문자열 길이 -4 까지는 숫자를 더하고, 
  • 그 뒤로는 *을 더한다. 

🎉 배운점

1. Stringbuilder 사용

2. String 객체와 String 객체를 더하는 행위는 메모리 할당과 연산이 많아 질 경우 성능 감소.

String은 내부의 문자열을 수정할 수 없다. 
예를 들어 String 객체를 +연산할 경우

String name = "ABC";
name += "people";
의 경우 한 개의 String 객체가 사용된 것이 아닌, 
"ABC" 에 "people" 가 추가된 "ABCpeople" 라는 새로운 `String 객체`가 생성된다.
그리고 str 변수는 새롭게 생성된 String 객체를 참조하게 된다.

 

3. replace 와 setCharAt 성능 비교 

setCharAt()은 시간 복잡도가 O(1)
replace()는 O(2N)

이유: replace()의 내장arraycopy()가 문자열을 덮어쓰는 불필요한 작업을 하게 되며 따라서 오버헤드가 발생한다.
따라서 시간이 오래 걸림

https://hyeonu1258.github.io/2018/03/10/StringBuilder_setCharAt_replace/

- 위 블로그에서 발췌했습니다.

 

StringBuilder 의 setCharAt(int i, char c) 과 replace(int start, int end, String str) 속도 비교 | 현우의 개발노트

StringBuilder 에 저장되어 있는 내용을 바꾸려다 replace() 와 setCharAt() 이 있음을 알게 되었다. 함수명만 봐도 replace()가 느릴거라 생각했지만, 속도차이가 조금일거라 예상했다. 써본 결과 replace() 의

hyeonu1258.github.io

4. length

 - arrays(int[], double[], String[])

 - length는 배열의 길이를 알고자 할때 사용된다.

 

5. length()

 - length()는 문자열의 길이를 알고자 할때 사용된다.

 

728x90
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday