본문 바로가기

코딩 테스트

[프로그래머스] (Lv.1) 핸드폰 번호 가리기

728x90

문제


프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 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 그 자체로 푸는 법.  두 가지 방법 모두 기억하자!