[프로그래머스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
  • 전체
    오늘
    어제
    • 분류 전체보기 (109)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (72)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (13)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (15)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (0)
        • 제품리뷰 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스냅샷과히스토리성 차이
    스냅샷과 히스토리
    JPA
    토이프로젝트개발일지
    해피해킹 커스텀
    db 초기화
    typedi 동작원리
    di의존성
    스냅샷방식
    validation failed (numeric string is expected)
    di란
    nestjs pipe body
    해피해킹 카라비너
    서이추
    해피해킹 키매핑
    db 날린 썰
    해피해킹 방향키
    azure ci/cd
    디비스냅샷
    typedi란
    창업패키지후기
    QueryDSL
    di동작원리
    db 날림
    githubaction 라벨 ci/cd
    해피해킹 꿀팁
    스냅샷과로그성
    nestjs pipe
    성능최적화 다양한 방법
    githubaction 라벨 배포
  • 최근 댓글

  • 최근 글

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

티스토리툴바