[TIL - 프로그래머스 문제풀이 2]

..·2023년 4월 8일
0

TIL

목록 보기
6/22
post-thumbnail

문제

핸드폰 번호 가리기

문제 설명

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


풀이

  1. 새로운 배열을 하나 만든 다음
  2. phone_number의 길이에서 4개를 뺀 만큼을 반복하게 하자
    (뒤 네 개는 별이 되면 안되니까)
  3. 그리고 그걸 새 배열에 넣어준다 push()사용
  4. 그리고 배열을 join("")을 사용해서 문자열로 전환
  5. slice() 사용해서 phone_number 에서 뒷자리 4개 떼어오자

처음에 배열을 문자열로 바꾸는 과정에서 toString()을 사용할 생각이었는데
그렇게 하면 , 로 구분된 상태로 전환되기 때문에 생각하다가 join()을 찾았다.
join()도 기본값은 ,가 붙어서 나오지만 join("")으로 쓰면 구분없이 연속으로 붙이기가 가능하다.


해결

function solution(phone_number) {
    let answer = '';
    let newArray = []; //새로운 배열을 하나 만든 다음

    for (let i = 0; i < phone_number.length - 4; i++) {
      // phone_number의 길이에서 4개를 뺀 만큼을 반복하게 하자 
 //  (뒤에 네 자리는 *이 되면 안되니까)
        newArray.push("*");
      //늘어나는 *을 새 배열에 넣어준다
      
    }

    answer = phone_number.slice(phone_number.length-4,phone_number.length);
    //phone_number.slice(-4) 로도 가능 
    return answer;
}
  • repeat과 slice 를 쓰면 더 간결한 코드가 가능하다.
function solution(s){
    let result = "*".repeat(s.length - 4) + s.slice(-4);
    return result;
  }

습득

join()

join() 메소드는 배열의 모든 요소를 하나의 문자열로 합치는 역할을 한다. 메소드를 호출할 때 구분자를 인자로 전달하면 각 요소 사이에 구분자를 삽입하고, 인자를 전달하지 않으면 기본값으로 쉼표(,)가 사용된다. 만약 요소를 구분자 없이 연속해서 합치고 싶다면 join("")처럼 사용하면 된다.

slice()

slice() 메서드는 문자열에서도 사용할 수 있는 메서드 중 하나로, 문자열의 일부분을 추출하여 새로운 문자열을 반환한다. 따라서, slice() 메서드를 사용하여 문자열의 일부분을 추출한 후, 그 결과로 반환되는 값은 새로운 문자열이다.

Math.abs()

Math.abs()는 주어진 숫자의 절대값을 반환하는 메서드이다.


질문

현업에서 var의 특징을 이용해서 일부러 var를 활용하는 경우도 있는지 궁금해서 기술 매니저님께 여쭤봤는데 그런 경우는 거의 없다고 한다. 옛날 코드가 아닌 새로 작성하는 코드에서는 var의 사용을 지양한다고 한다.

0개의 댓글