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

2022. 6. 4. 00:32·📂 Backend Engineering
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

[프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용  (0) 2022.06.05
[프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기  (0) 2022.06.04
@PutMapping이용시 오류메시지 해결하기 / not-null property references a null or transient value  (0) 2022.05.27
[Spring] 스프링 DI 사용 시 생성자 주입을 사용하자!  (0) 2022.04.27
[JavaScript] 프로미스와 프로미스 API구조  (0) 2021.10.19
'📂 Backend Engineering' 카테고리의 다른 글
  • [프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용
  • [프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기
  • @PutMapping이용시 오류메시지 해결하기 / not-null property references a null or transient value
  • [Spring] 스프링 DI 사용 시 생성자 주입을 사용하자!
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (106) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (38)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바