[프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)

2022. 6. 4. 00:32·💻 개발/알고리즘
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > 알고리즘' 카테고리의 다른 글

콜라츠 추측 함수로 쪼개어 풀어보기  (0) 2022.10.01
[프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬  (0) 2022.06.08
[프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용  (0) 2022.06.05
[프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기  (0) 2022.06.04
[프로그래머스 Level1] 직사각형 별찍기-자바(Java)  (0) 2022.06.04
'💻 개발/알고리즘' 카테고리의 다른 글
  • [프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬
  • [프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용
  • [프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기
  • [프로그래머스 Level1] 직사각형 별찍기-자바(Java)
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (73)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (14)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (32)
        • 회고록 (14)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (1)
        • 제품리뷰 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
foodev
[프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)
상단으로

티스토리툴바