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

정답 코드
< 내 정답 코드 >
import java.util.Arrays;
class Solution {
public String solution(String phone_number) {
char[] charArr = phone_number.toCharArray();
char[] newCharArr = new char[phone_number.length()];
Arrays.fill(newCharArr, '*');
System.arraycopy(newCharArr, 0, charArr, 0, newCharArr.length - 4);
String answer = String.valueOf(charArr);
return answer;
}
}
< 타인 답변 코드 1 >
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);
}
}
< 타인 답변 코드 2 >
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;
}
}
이것을 주의하자!
- 내가 푼 방법은
(1) toCharArray() 메서드를 통해 String 객체를 char[] 배열로 만든다.
(2) 새로운 char[] 배열을 만든 다음 Arrays.fill(newCharArr, ' * ') 메서드로 ' * ' 을 가득 채운다.
(3) 전화번호 배열에 새롭게 만든 ' * ' 배열을 일정 숫자만큼 복사한다.
(4) 배열을 String.valueOf( charArr )로 String 객체로 바꾼다.
- Arrays.fill(배열 변수 , 초기화 값) 메서드는 Arrays 클래스의 static 메서드이다. 매개변수론 채우려는 배열과 채우고자 하는 값 2개를 넣는다.
- Arrays.arraycopy(복사하려는 배열, 시작점, 복사 당하는 배열, 시작점, 갯수) 메서드의 이름은 arrayscopy() 가 아님을 유의하자.
- 배열을 String 으로 바꾸기 위해선 String.valueOf() 메서드를 사용한다. toString() 메서드는 해당 객체의 toString() 메서드를 불러오는 것이기 때문에 따로 오버라이딩을 하지 않았으면 해당 객체의 주솟값과 해시코드가 나올 것이다.
- '타인 답변 코드 1'을 보면 나와 비슷하다. 하지만 나보다 훨씬 간단하다! 잘 생각해보면 새로운 배열을 만들 필요가 없다. 그냥 만들어진 char[] 배열에 ' * ' 을 넣으면 된다. 사실 이런 방향도 생각은 했지만, 배열의 특성을 생각해서 성능 저하가 우려되었다. 그러나 내 방법이 더 복잡한 것 같다 ㅎㅎ
- '타인 답변 코드 2'에선 배열을 사용하지 않고 풀었다. 이 방법도 잘 생각해보면 참신하다.
- 배열을 사용하는 법 / String 그 자체로 푸는 법. 두 가지 방법 모두 기억하자!
'코딩 테스트' 카테고리의 다른 글
| [프로그래머스] (Lv.1) 평균 구하기 (0) | 2022.08.30 |
|---|---|
| [프로그래머스] (Lv.1) 하샤드 수 (0) | 2022.08.30 |
| [프로그래머스] (Lv.1) 행렬의 덧셈 (0) | 2022.08.30 |
| [프로그래머스] (Lv.1) x만큼 간격이 있는 n개의 숫자 (0) | 2022.08.30 |
| [프로그래머스] (Lv.1) 직사각형 별찍기 (0) | 2022.08.29 |