본문 바로가기
나의 개발일지/알고리즘 테스트

[프로그래머스 - Level 1] 핸드폰 번호 가리기 (JS)

by stella_gu 2022. 7. 16.

 

뒤에서부터 4자리 가져오고 → "*"에다가 뒤에서 4번째 전까지의 길이만큼 곱한 걸 합친다!

 

어제 배운 substr() 함수를 이용해 substr(-1, -4)를 하면 뒤에서 4개 가져올 수 있을줄 알았는데

자세히 보니 'str.substr(시작 인덱스, 추출 개수)'였다
 
 
시작을 뒤에서 4번째(-4)부터 해서, 4개 추출 하는 걸로 바꾸니 잘 돌아간다!
 
 
그럼 *로 바꿀 번호의 개수는 어떻게 알 수 있을까... 또 머리가 안 돌아가서 찾아봤다!
 

 

▼ 오늘의 함수

str.substr(시작 인덱스, 추출 개수)
str.substring(시작 인덱스, 끝 인덱스)  → 끝 인덱스 앞까지 추출 

       ※ substring()의 경우 (시작 인덱스 번호, 끝 인덱스 번호+1)로 해야 시작부터 끝까지 다 나옴

 

"*"로 바꿀 번호는 첫번재 숫자부터 뒤에서 5번째까지니까 substring() 사용하여 해결!

 

function solution(phone_number) {
    const Bnum = phone_number.substr(-4, 4)
    const Fnum_length = phone_number.substring(0, phone_number.length-4).length
    let answer = "*".repeat(Fnum_length)+Bnum
    return answer
}

console.log(solution("01012345678"));	// 결과값 : *******5678
console.log(solution("0211112222"));	// 결과값 : ******2222
  • Bnum(뒷 자리) : 폰 번호의 뒤에서 4번째(-4)부터 4개
  • Fnum_length(앞 자리 길이) : 폰 번호의 첫번째 자리(0)부터 뒷자리 4개 제외한 길이만큼
    • "01012345678"을 예로 들면, phone_number.length는 11이 되고, "01012345678" 중 "4"의 인덱스 넘버는 6번이므로 -4를 하여 substring(0, 11-4)를 추출하면 "0101234" 반환.

 

 

 

 

다른 사람들은 어떻게 풀었나

// 정규식 사용

function hide_numbers(s) {
    return s.replace(/\d(?=\d{4})/g, "*");
}

console.log(hide_numbers('01033334444'));	// 결과값 : *******4444
console.log(hide_numbers('0211112222'));	// 결과값 : ******2222




// slice()는 '음수' 지원

function hide_numbers2(s){
    var result = "*".repeat(s.length - 4) + s.slice(-4);
    return result;
}

console.log(hide_numbers2('01033334444'));	// 결과값 : *******4444

 

 

▼ 오늘의 함수

str.slice(시작 인덱스, 끝 인덱스)  끝 인덱스 앞까지 추출 
  • 시작 인덱스만 넣을 경우 해당 인덱스 번호부터 끝까지 추출.
  • slice()는 음수(-)를 지원함.

 

 

 

 

[참고] substr / substring / slice

 

[Javascript] substr(), substring(), slice() 비교

string.slice(start, end) Javascript에서 substr(), substring(), slice() 함수는 모두 문자열을 잘라주는 역할을 합니다. 이 함수들은 모두 비슷하지만, 조금씩 작동 방법이 다릅니다. 이 세가지 함수를 비교해..

hianna.tistory.com