728x90
leetcode.com/problems/masking-personal-information/
처음에 지역번호에 + 이외에 - 도 나오는 줄 알고 조건 걸었는데, 조건이 필요가 없었다.
그래서 반복적인 조건을 없애보려는 노력도 부질없는..😂
첫 번째 풀이
class Solution {
public String maskPII(String S) {
// mask an email (at least 8 length)
int idx = S.indexOf("@");
if(idx != -1){
S = S.toLowerCase();
String [] names = S.split("@");
char first = names[0].charAt(0);
char last = S.charAt(idx - 1);
return first+"*****"+last+"@"+names[1];
}
// mask an phone number (at least 10 length)
// check the number of digit
String numberOnly = S.replaceAll("[^0-9]","");
String lastDigit = numberOnly.substring(numberOnly.length()-4);
switch (numberOnly.length()){
case 10:
return "***-***-"+lastDigit;
case 11:
if (S.charAt(0)=='+' || S.charAt(0)=='-'){
return S.charAt(0)+"*-***-***-"+lastDigit;
}
return "+*-***-***-"+lastDigit;
case 12:
if (S.charAt(0)=='+' || S.charAt(0)=='-'){
return S.charAt(0)+"**-***-***-"+lastDigit;
}
return "+**-***-***-"+lastDigit;
case 13:
if (S.charAt(0)=='+' || S.charAt(0)=='-'){
return S.charAt(0)+"***-***-***-"+lastDigit;
}
return "+***-***-***-"+lastDigit;
}
return "";
}
}
바꾼 풀이
class Solution {
public String maskPII(String S) {
// mask an email (at least 8 length)
int idx = S.indexOf("@");
if(idx != -1){
S = S.toLowerCase();
String [] names = S.split("@");
char first = names[0].charAt(0);
char last = S.charAt(idx - 1);
return first+"*****"+last+"@"+names[1];
}
// mask an phone number (at least 10 length)
// check the number of digit
String numberOnly = S.replaceAll("[^0-9]","");
String lastDigit = numberOnly.substring(numberOnly.length()-4);
switch (numberOnly.length()){
case 10:
return "***-***-"+lastDigit;
case 11:
return "+*-***-***-"+lastDigit;
case 12:
return "+**-***-***-"+lastDigit;
case 13:
return "+***-***-***-"+lastDigit;
}
return "";
}
}
별표갯수가 lastDigit 4개 뺀만큼 있는 규칙을 이용해서 이런 날것 코드보다 더 규칙성있게 로직을 구현할 수 있을것같은데 떠오르지 않는다.
보완
class Solution {
public String maskPII(String S) {
// mask an email (at least 8 length)
int idx = S.indexOf("@");
if(idx != -1){
S = S.toLowerCase();
String [] names = S.split("@");
char first = names[0].charAt(0);
char last = S.charAt(idx - 1);
return first+"*****"+last+"@"+names[1];
}
// mask an phone number (at least 10 length)
// check the number of digit
String numberOnly = S.replaceAll("[^0-9]","");
String lastDigit = numberOnly.substring(numberOnly.length()-4);
if(numberOnly.length() == 10){
return "***-***-"+lastDigit;
}else{
return "+"+"*".repeat(numberOnly.length()-10)+"-***-***-"+lastDigit;
}
}
}
repeat(반복횟수)
함수 사용 (JAVA 11 부터 사용가능)
함수 나누기
class Solution {
public String maskEmail(String S, int idx){
S = S.toLowerCase();
String [] names = S.split("@");
char first = names[0].charAt(0);
char last = S.charAt(idx - 1);
return first+"*****"+last+"@"+names[1];
}
public String maskPH(String S){
String numberOnly = S.replaceAll("[^0-9]","");
String lastDigit = numberOnly.substring(numberOnly.length()-4);
if(numberOnly.length() == 10){
return "***-***-"+lastDigit;
}else{
return "+"+"*".repeat(numberOnly.length()-10)+"-***-***-"+lastDigit;
}
}
public String maskPII(String S) {
int idx = S.indexOf("@");
if(idx != -1){
return maskEmail(S, idx);
}
return maskPH(S);
}
}
728x90
'코딩테스트' 카테고리의 다른 글
[LeetCode] Maximum Depth of Binary Tree (0) | 2021.04.27 |
---|---|
[LeetCode] 1051. Height Checker (0) | 2021.04.24 |
[LeetCode] 1518. Water Bottles (0) | 2021.04.21 |
[LeetCode] 202. Happy Number (0) | 2021.04.21 |
[LeetCode] 268. Missing Number (4) | 2021.04.19 |