예제:
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
출처 : 프로그래머스
'프로그래머스 - JAVA > Level 1' 카테고리의 다른 글
[JAVA] 프로그래머스 Lv.1 : 평균 구하기 (0) | 2021.04.01 |
---|---|
[JAVA] 프로그래머스 Lv.1 : 하샤드 수 (0) | 2021.04.01 |
[JAVA] 프로그래머스 Lv.1 : 행렬의 덧셈 (0) | 2021.04.01 |
[JAVA] 프로그래머스 Lv.1 : x만큼 간격이 있는 n개의 숫자 (0) | 2021.04.01 |
[JAVA] 프로그래머스 Lv.1 : 소수 만들기 (0) | 2021.03.31 |