본문 바로가기
  • Jetpack 알아보기
프로그래머스 - JAVA/Level 1

[JAVA] 프로그래머스 Lv.1 : 핸드폰 번호 가리기

by 새우버거♬ 2021. 4. 1.

 

예제:

 

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

 

제한 조건:

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

Solution #1

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

        for (int i = 0; i < phone_number.length(); i++) {
            if (i >= phone_number.length() - 4) answer.append(phone_number.charAt(i));
            else answer.append("*");

        }
        return answer.toString();
    }
}

 

Result #1

 

💡 for 반복문을 이용해 문자열을 append()하는 방법으로 간단하게 풀었다.

 


Solution #2

class Solution {
    public String solution(String phone_number) {
        return phone_number.replaceAll(".(?=.{4})", "*");
    }
}

 

Result #2

 

💡 정규표현식과 replaceAll() 함수를 이용하여 코드를 간결하게 수정하였다. 실행 시간이 더 증가한 것을 확인할 수 있는데 이는 replaceAll()의 시간복잡도가 O(n)이기 때문이다. 정규표현식을 해석해보자.

 

정규표현식

   .    : 개행 문자를 제외한 모든 단일 문자와 대응된다.

예를 들어, /.n/는 "nay, an apple is on the tree"에서 'an'과 'on'에 대응되지만, 'nay' 에는 대응되지 않는다.

 

   x(?=y)    : 오직 'y'가 뒤따라오는 'x'에만 대응됩니다. 이것은 lookahead 라고 불립니다.

 

   {n}    : 앞 표현식이 n번 나타나는 부분에 대응됩니다. n은 반드시 양의 정수여야 합니다.
예를 들어, /a{2}/는 "cand,"의 'a'에는 대응되지 않지만, "caandy,"의 모든 a 와, "caaandy."의 첫 두 a 에는 대응됩니다.

 

.(?=.{4})

 x  == .

모든 단일 문자

 y  == .{4}

모든 단일 문자가 4번 나타나는 부분

∴ 오직 (모든 문자가 4번 나타나는 부분)가 뒤따라 오는 (모든 단일 문자)

=> 뒷 4자리를 제외한 모든 단일 문자

 


 

More Algorithm!

 

👇👇

 

github.com/ggujangi/ggu.programmers

 

ggujangi/ggu.programmers

프로그래머스 알고리즘, JAVA. Contribute to ggujangi/ggu.programmers development by creating an account on GitHub.

github.com

 

 

출처 : 프로그래머스