[JAVA]프로그래머스 1단계 : 핸드폰 가리기

이지연·2021년 1월 13일
0

https://programmers.co.kr/learn/courses/30/lessons/12948

문제

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

제한조건

  • s는 길이 4 이상, 20이하인 문자열입니다.

코드

package mypro;

public class Solution2 {
    public String solution(String phone_number) {

    	String answer = "";
    	String reverse = "";

        
        for(int i= phone_number.length()-1; 1<i; i--) {
        	reverse = "";
        	
        	if(i >= phone_number.length()-4) {
        		reverse += phone_number.charAt(i); 
        		//System.out.print(i+"번"+temp+"|");
	        }else {
	        	reverse += "*";
	        	//System.out.print(temp);
	        }
        }
        
        for(int j= reverse.length()-1; 1<j; j--) {
        	answer += reverse.charAt(j);
        	System.out.print("1"+answer);
        }
  
        return answer;
    }

답이 안 나온다. 왜일까?

문제점

오늘도 마찬가지로 2가지 문제점이 있었다.

1) 첫번째 for문 안에 reverse=""; 은 지워야 한다.

이 때문에 for문을 돌때마다 초기화되어버렸다.

2) 2개의 for문 모두 핸드폰 자리수인 11개가 나오지 않았다.

i나 j의 length()-1를 했으면 0까지 나오도록 수정해야한다.

잘못 생각

10 9 8 7 6 5 4 3 2  (9개)

고친 생각

10 9 8 7 6 5 4 3 2 1 0 (11개)

역 for문으로 인해 헷갈렸다.

수정 코드

package mypro;

public class Solution2 {
    public String solution(String phone_number) {

    	String answer = "";
    	String reverse = "";

        for(int i= phone_number.length()-1; -1<i; i--) {
        	if(i >= phone_number.length()-4) {
        		reverse += phone_number.charAt(i); 
	        }else {
	        	reverse += "*";
	        }
        }
        
        for(int j= reverse.length()-1; -1<j; j--) {
        	answer += reverse.charAt(j);
        }
  
        return answer;
    }
   }

그 외 방법

1) substring()을 활용해 숫자가 나와야 하는 부분과 *이 나와야 하는 부분을 분리해서 더해도 좋다.

2) replace()를 활용해서 특정문자열을 원하는 문자열로 치환하는 방법도 존재한다.

profile
Everyday STEP BY STEP

0개의 댓글