티스토리 뷰

반응형

Using Language : Java
Using Tool : IntelliJ


  • 프로그래머스 문제 소개

< 핸드폰 번호 가리기 >

문제 설명

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

제한 조건

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

예시

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

의사코드

  1. 핸드폰 번호의 길이를 세어준다.
  2. 총 길이중 4자리 말고는 모두 *로 정답에 넣어준다 ex : 번호 길이가10이라면, 그 중 6 개는 *로 처리
  3. *만 들어가 있는 정답에 substring을 이용하여 나머지 전화번호 4자리를 붙여준다.

코드 작성 및 테스트 결과

string이외에 StringBuffer, StringBuilder라는 것들이 있다는 것을 처음 알게되었다.

(리팩토링 중 알게 된것,,)

각 차이점이 크지는 않았지만 잠시 정리해보았다.

공통점 : 셋 다 문자열인 string을 관리하는 클래스

차이점 : string은 불변적, StringBuffer, StringBuilder는 가변적이라는 점.

String은 +나 concat을 사용해서 문자열이 추가된다면 메모리 공간이 자동 변화하는 것이 아니라, 새로운 String 이 생성되어서 새로운 메모리 공간을 만드는 것이다. 이렇게 되면 원래 있던 문자열은 가비지 콜렉터가 제거해주어야 하는데 언제 제거될지 모르는 단점이 생기고 문자열 연산이 많을때 계속 객체를 만드는 오버헤드가 발생 할 수도 있다.

따라서, 문자열 연산이 많은 경우는 가변적인 StringBuffer, StringBuilder를 사용하면 성능이 좋아지고, 두 클래스는 메서드들 사이에 호환도 가능하다고 한다. 하지만, 둘의 차이는 StringBuilder가 싱글쓰레드에서 연산처리가 더 빠르다고한다.


<Solution11.java>

package practice;

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

    제한 조건
    s는 길이 4 이상, 20이하인 문자열입니다.

    입출력 예
    phone_number	    return
    01033334444	        *******4444
    027778888	        *****8888

    1. 전화번호의 길이를 센다.
    2. 뒤에서 네번째 길이를 제외한 나머지는 *로 바꾸어준다.
    */

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

        int len = phone_number.length();

        for(int i=0; i<len-4;i++){
            answer.append("*");
        }

        String last = "";
        last+=phone_number.substring(len-4);
        return answer+last;
    }
}


<Solution11Test.java>

package practice;

import org.junit.Test;
import static org.junit.Assert.*;

public class Solution11Test {
    @Test
    public void solution() {

        Solution11 solution11 = new Solution11();

        assertEquals(solution11.solution("01033334444"),"*******4444");
        assertEquals(solution11.solution("027778888"),"*****8888");
    }
}


github에서 문제 확인하기



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함