항해 프로그래머스

항해2주차 자바스크립트 프로그래머스 - 핸드폰 번호 구하기

완두노예 2023. 1. 27. 20:30

substring 메소드 사용시

substring 메소드의 인자1, 인자2만 잘 바꾸면 문자열의 뒤 3자리를 가져올 수 있다.

substring(인자1, 인자2)
인자 1은 시작지점 index, 인자 2는 끝지점 index

ex)
String str="Hello";
str.substring(0, 4); 
// Hell
// 0123 -> 인자 2의 index-1의 문자까지 반환한다.

 

Subatr 사용법

substr("시작 위치", "길이") 또는 substr("시작 위치")

substr() 함수는 시작 위치부터 해당 길이만큼 문자열을 자르는 아주 기본적인 함수이다.

"길이" 부분을 생략하면 시작 위치부터 문자열 끝까지 자른다.

// str.substr(start[, length])
// str.substring(indexStart[, indexEnd])
// str.slice(beginIndex[, endIndex])

var str = '자바스크립트';

var result1 = str.substr(0, 2);
// 결과 : "자바"

var result2 = str.substr(2, 4);
// 결과 : "스크립트"

var result3 = str.substr(2);
// 결과 : "스크립트"

Substring 사용법

substring("시작 위치", "종료 위치") 또는 substring("시작 위치")

substring() 함수는 시작 위치에서 종료 위치까지 문자열을 자른다. 주의할 점은 종료 위치의 -1까지 문자열을 자른다는 것이다.

var str = '자바스크립트';

var result1 = str.substring(0, 2);
// 결과 : "자바"

var result2 = str.substring(2, 5);
// 결과 : "스크립"

var result3 = str.substring(2, 6);
// 결과 : "스크립트"

var result4 = str.substring(2);
// 결과 : "스크립트"

substring() 함수에서 음수(-) 사용 시 주의사항

substring() 함수에서 인자에 음수(-)를 대입하면 해당 값은 "0"으로 치환되며,

종료 위치에 음수(-) 또는 "0"인 경우 첫 번째 인수와 두 번째 인수가 뒤바뀐다는 것을 주의해야 한다. 

var str = '자바스크립트';

var result1 = str.substring(-4, 5); // str.substring(0, 5)
// 결과 : "자바스크립"

var result2 = str.substring(2, -1); // str.substring(0, 2)
// 결과 : "자바"

 

Slice 함수로 문자열 자르는 방법 (뒤에서 부터 자르기)

slice("시작 위치", "종료 위치") 또는 slice("시작 위치")

slice() 함수는 기본적인 사용법은 substring() 함수와 동일하며, 다른 점은 음수(-)를 자유롭게 사용할 수 있어서

뒤에서부터 문자열을 자를 때 유용하게 사용할 수 있다.

slice() 함수는 문자열을 뒤에서부터 자르는 str.slice(-4) 이 부분만 확실히 이해하면 될꺼같다.

문자열의 뒤에서 4번째 자리부터 끝까지 문자열을 자르라는 의미이다.

var str = '자바스크립트';

var result1 = str.slice(0, 2);
// 결과 : "자바"

var result2 = str.slice(2, 6);
// 결과 : "스크립트"

var result3 = str.slice(2);
// 결과 : "스크립트"

/************************************/

var result4 = str.slice(-4);
// 결과 : "스크립트"

var result5 = str.slice(-4, 5);
// 결과 : "스크립"

var result6 = str.slice(2, -1);
// 결과 : "스크립"

---------------찾아보니까 substr은 옛날 함수라 쓰지말라고하고, substring 하고 slice가 남아있는데

                  slice 가 '음수' 지원이 되므로 slice를 쓰는 것을 추천한다는 글이 있다---------------

숫자를 *로 변환

Repeat 사용해서 숫자를 *로 반복하여 실행되게 하는 방법

repeat()는 매개변수의 값만큼 새로운 문자열로 반환해준다.

function solution(phone_number) {
    var answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
    return answer;
}

 

처음 풀이

function solution(phone_number) {
    var answer = "*".repeat(phone_number.length) + phone_number.slice(-4);
    return answer;
}

재수정 풀이

function phone_number(num) {
    var answer = "*".repeat(num.length -4) + num.slice(-4);
    return answer;
}

//뒤에서 4개만 표시되는 메소드 찾아보기(slice)
//실행했는데 안됨. 결괏값 뒤에 4자리만 표시됨
//*표시해야됨!

최종 풀이

function solution(phone_number) {
    return answer = "*".repeat(phone_number.length -4) + phone_number.slice(-4);
    }

//뒤에서 4개만 표시되는 메소드 찾아보기(slice)
//실행했는데 안됨. 결괏값 뒤에 4자리만 표시됨
//*표시해야됨!

다른 풀이

function solution(phone_number) {
  // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과
  // phone_number의 -4인덱스부터 끝까지 추출한 문자열을
  // 이어붙인 후 반환
  return "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
}

정규식 이용---->뭘까? 무섭게 생김ㄷㄷ

function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}
const solution = n => [...n].fill("*",0,n.length-4).join("")
//문자열 n 을 배열로 바꾸고, 배열의 첫번째부터 마지막에서 4번째 전 배열크기만큼 * 로 채워라. 
//이 후에 join 하여 string으로 반환하라.

charAt ?

function hide_numbers(s){
  var result = ""
  
  for(var i=0;i< s.length;i++){    
    result += i < s.length -4 ? "*" : s.charAt(i);
  }  
  return result;
}
function hide_numbers(s){
  var result = Array(s.length-3).join("*") 
  var cut = s.substring(s.length-4) 

  return result+cut;
}
function hide_numbers(s){
  var _str = '';
  for(var i = 0; i < s.length - 4; i ++){
    _str += '*';
  }
  var result = s.replace(s.substr(0, s.length - 4), _str);
  return result;
}
function hide_numbers(s){
  var result = "";
  var len = s.length-4;
  for(var i=0; i<len; i++){
    result += '*';
  }
  return result + s.substring(len,s.length);
}