1.문제 설명
(1) 사용자의 이름, 주민등록번호, 전화번호 그리고 이 개인 정보에서 보여줄 글자의 수가 주어졌을 때, 해당 글자까지만 보이고 나머지는 *로 대체하여 반환하는 함수를 구현하라
ex) 나코딩, 990130-1234567,010-1234-5678이 주어졌을 때 각각 1, 8, 9개의 글자만 보이고 나머지는 *로 대체하여
출력하시오.
// 주어진 코드
// getHiddenData를 구현해야함.
String name = "나코딩"; // 이름
String id = "990130-1234567"; // 주민등록번호
String phone = "010-1234-5678"; // 전화번호
System.out.println("이름: " + getHiddenData(name, 1));
System.out.println("주민등록번호: " + getHiddenData(id, 8));
System.out.println("전화번호: " + getHiddenData(phone, 9));
2. 내가 만든 코드
public static String getHiddenData(String input, int number) {
//totalNum은 input의 총 길이
int totalNum = input.length();
//partOfInput은 표시해야할 값의 길이
String partOfInput = input.substring(0,number);
//partOfInput을 문자 별로 쪼개서 배열에 집어 넣음
String[] p = partOfInput.split("");
// 총 길이만한 배열도 만듦
String[] s = new String [totalNum];
//배열s안에 표시해야할 값 넣고 나머지는 *로 채움
for (int i = 0; i < partOfInput.length(); i++) {
s[i] = p[i];
}
for (int j = number; j < input.length(); j++) {
s[j] = "*";
}
// 배열을 다시 문자열로 바꾸어서 반환
String a = Arrays.toString(s);
return a;
}
3. 틀린 점
//<반환 내용>
이름: [나, *, *]
주민등록번호: [9, 9, 0, 1, 3, 0, -, 1, *, *, *, *, *, *]
전화번호: [0, 1, 0, -, 1, 2, 3, 4, -, *, *, *, *]
(1) String 또한 +를 이용해 문자열에 문자를 추가할 수 있음을 알지 못했다.
String s = "apple의 시작 문자는 "
s += "a"
//s를 출력하면 "apple의 시작 문자는 a"가 된다.
(2)Arrays.toString(배열 이름)을 쓰게 되면 배열을 문자열로 바꿀 수 있으나 문자열의 형태는 [ ] 속에 배열의 원소가 나열된 형태로 저장된다. (이것은 문제가 원하는 출력 값이 아니다.)
ex) 위의 코드에서 a에 "나**"이 들어간 것이 아니라 a = "[나,*,*]"이 들어간 것이 된다.
4. 해답 코드
public static String getHiddenData(String data, int index) {
// 표시해야할 부분까지 잘라서 문자열에 넣기
// 나코딩 -> 나
String hiddenData = data.substring(0,index);
//자른 부분부터 원래 문자열 끝까지는 *로 채우기
for (int i = index; i < data.length(); i++) {
hiddenData +="*";
}
그냥 string에 문자 +하는 것 이용해주면 된다.
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[백준 11022번] (0) | 2023.02.08 |
---|---|
[백준 11021번] (0) | 2023.02.08 |
JAVA QUIZ 08 (0) | 2023.02.02 |
[JAVA QUIZ] 햄버거 주문서 만들기 (0) | 2023.01.29 |
백준 15552 문제(빠른 A+B) Code review (0) | 2023.01.25 |