알고리즘/프로그래머스

코딩테스트 연습 / 연습문제 / 핸드폰 번호 가리기 / JAVA

외계공룡 2020. 4. 16. 11:00

 


풀이방법 1

import java.util.Arrays;

class Solution {
  public String solution(String phone_number) {
      String answer = "";
      
      char[] str = phone_number.toCharArray();
      Arrays.fill(str,'*');
      
      for(int i=phone_number.length()-1; i>=phone_number.length()-4; i--){
          str[i] = phone_number.charAt(i);
      }
      
      answer = String.valueOf(str);
      
      return answer;
  }
}

toCharArray 메소드로 전화번호를 전부 '*'로 채운 배열을 만든다음 phone_number의 뒷자리 4개를 바꿔주는 방식입니다. 그러나 곰곰이 생각해보면 toCharArray를 하고 전부 '*'로 채울 필요 없이 나머지 부분만 '*'로 채워줬어도 하는 아쉬움이 남습니다.


풀이방법 2

class Solution {
  public String solution(String phone_number) {
      String answer = "";
      
      char[] str = phone_number.toCharArray();
      
      for(int i=0; i<phone_number.length()-4; i++){
          str[i] = '*';
      }
     
      answer = String.valueOf(str);
      
      return answer;
  }
}

위의 식을 좀 더 다듬어서 phone_number.length - 4 이전 까지만 '*'로 채우도록 실행시켰습니다.

좀 더 효율성을 고려해본 코드입니다.

 

저 같은 경우에는 처음 이식을 짤 때 for문을 두개로 나눠서 phone_number.length - 4 까지 *로 채우는 코드랑 phone_number.length - 4부터 끝까지 charAt()으로 변경해주는 코드로 작성했는데 생각해보니 toCharArray()메소드가 이미 String객체를 형태소 단위로 잘라서 넣어주었기 때문에 charAt()메소드를 쓰지 않아도 된다는 점을 간과했습니다. 아직 라이브러리 사용법이 미숙하다는 점을 깨달았습니다. 공부가 좀 더 필요할 것 같습니다.


풀이방법 3

class Solution {
  public String solution(String phone_number) {
    return phone_number.replaceAll(".(?=.{4})", "*");
  }
}

다른 분들 풀이중에 가장 인상 깊었던 풀이는 정규식으로 접근했던 풀이 입니다.

한 줄이라 그런지 굉장히 깔끔합니다.


히스토리

 

chucoding/algorithm

알고리즘 문제풀이 사이트 도전~!! . Contribute to chucoding/algorithm development by creating an account on GitHub.

github.com