2022. 1. 16. 03:40ㆍ알고리즘/프로그래머스
<문제>
class Solution {
public String solution(String phone_number) {
String answer = "";
for (int i = 0; i < phone_number.length() - 4; i++)
answer += "*";
answer += phone_number.substring(phone_number.length() - 4);
return answer;
}
}
class Solution {
public String solution(String phone_number) {
char[] ch = phone_number.toCharArray();
for(int i = 0; i < ch.length - 4; i ++){
ch[i] = '*';
}
return String.valueOf(ch);
}
}
<코드 & 설명>
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();
}
}
StringBuilder : String 객체를 더할 때 새로운 객체를 생성하는 것이 아니기 때문에 상대적으로 속도도 빠르고 메모리도 효율적으로 이용할 수 있다.
뒷 4자리는 무조건 숫자가 표현되어야 하므로 phone_number.length()-4을 해준다.
StringBuilder의 내장 함수setCharAt(int index, char ch)를 사용하여 주어진 인덱스에 있는 문자를 주어진 문자로 바꿔준다.
StringBuilder는 문자열을 뽑아낼 때 .toString()을 사용한다.
<다른 방법1>
class Solution {
public String solution(String phone_number) {
String answer = "";
String[] a = phone_number.split("");
for(int i= 0; i<a.length; i++){
if(i < (a.length-4)) {
answer += "*";
} else {
answer += a[i];
}
}
return answer;
}
}
1. 핸드폰 번호를 가린 answer 변수를 String 으로 객체 생성
2. split을 사용하여 phone_number을 하나씩 잘라서 a라는 문자열 배열에 저장
3. 총 answer의 길이가 a.length와 동일하기에 for문을 사용
1) i < a.length-4 일 때
- 맨 뒷 자리 4자리수만 빼고 가리면 되기에 "*"을 answer에 추가
2) i < a.length-4 가 아닐 때
- 맨 뒷 자리 4자리 수는 가리면 안 되기에 a[i]에 해당하는 수를 answer에 추가
3. answer를 return을 사용하여 반환
<다른 방법2>
(1) string에 계속 문자 추가
class Solution {
public String solution(String phone_number) {
int len = phone_number.length(); // len은 번호의 길이
String answer = "";
for (int i=0; i<len; i++) { // 번호의 길이만큼 반복
if (i< len-4) { // 끝에서 4번째 전까지의 자리에는
answer += "*"; // "*"을 추가
} else { // 그 이후에는
answer += phone_number.substring(i,i+1); // phone_nuber의 숫자 하나씩 추가
}
}
return answer;
}
}
(2) stringbuilder에 계속 문자 추가
class Solution {
public String solution(String phone_number) {
int len = phone_number.length(); // len은 번호의 길이
StringBuilder sb = new StringBuilder(); // stringbuilder인 sb를 생성
for (int i=0; i<len; i++) { // 번호의 길이만큼 반복
if (i< len-4) { // 끝에서 4번째 전 까지는
sb.append("*"); // "*"을 추가
} else { // 그 이후에는
sb.append(phone_number.substring(i,i+1)); // phone_number의 숫자 하나씩 추가
}
}
String answer = sb.toString(); // stringbuilder인 sb를 string으로 변환
return answer;
}
}
(1),(2) 설명
:
문자열 answer를 비워둔 값 ""으로 정의하고 for문으로 answer에 *과 전화번호를 추가한다. 번호의 길이를 기준으로 (번호길이-4) 자리까지는 "*"을 추가하고 그 이후로는 substring으로 추출하여 번호 한자리씩 추가한다.
- 문자열은 +를 이용하여 문자를 추가할 수 있다.
- stringbuilder는 스트링빌더.append(문자열)로 스트링빌더에 문자열을 추가할 수 있다.
- string은 크기가 고정되어 있다.(불변) 따라서 기존 객체에 문자를 추가하여 수정하는 것처럼 보여도 실제로는 기존 객체의 크기를 늘릴 수 없기 때문에 새로운 문자열을 계속 만들어내는 것이다.
- stringbuilder는 크기가 고정되어 있지 않다.(가변) 따라서 기존 객체에 문자를 추가할 수 있고 기존 객체가 수정되는 것이다.
- stringbuilder처럼 append를 써서 문자를 계속 추가할 수 있는 stingbuffer(가변)가 있는데 두 클래스는 동기화 지원 유무가 다르다고 한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘 : 프로그래머스 : JAVA : x만큼 간격이 있는 n개의 숫자 (0) | 2022.01.16 |
---|---|
알고리즘 : 프로그래머스 : JAVA : 행렬의 덧셈 (0) | 2022.01.16 |
알고리즘 : 프로그래머스 : JAVA : 가운데 글자 가져오기 (0) | 2022.01.15 |
알고리즘 : 프로그래머스 : JAVA : 짝수와 홀수 (0) | 2022.01.15 |
알고리즘 : 프로그래머스 : JAVA : 직사각형 별찍기 (0) | 2022.01.15 |