2022. 1. 10. 10:55ㆍWEB Dev/CordingTEST
아침에 할 일이 많은데 잠깐이라도 머리를 풀고 가야 할 것 같아서 프로그래머스를 켰다.
힘들고... 서럽구만...
[문제] 핸드폰 번호 가리기
주어지는 변수는 phone_number 라는 변수고 전화번호이다. 전화번호 뒤의 4자리를 제외한 앞자리를 전부 * 애스터리스크로 가리고 리턴하는 함수를 작성하라.
근데 왜 제한 조건에는 s라고 되어 있는건지 모르겠지만
아무튼 주어지는 변수는 길이가 4자 이상, 20자 이하인 문자열이다.
[풀이]
제한 조건을 먼저 조건문으로 작성한다.
function solution(phone_number) {
var answer = '';
if( 4 <= phone_number <= 20) {
}
return answer;
}
그리고 문자열을 잘라 뒤의 4자리는 살리고, 나머지 앞의 문자를 변환한다.
자바스크립트의 문자열들을 변환하는 메소드를 찾아본다.
변환, 대치 등으로 검색하면 될 것 같다.
replace() 를 사용하면 될 것 같은데, replace는 문자열의 '특정' 문자를 다른 문자로 치환해주는 문자열이기 때문에 적합하지 않을 수 있다.
정규식을 사용할 수 있다는데, 자릿수 지정이 될까?
아니면 그냥 뒤의 4자리를 slice로 잘라놓고, 나머지 자리도 slice로 반환받아 변환하고, 합치는 방법을 사용해도 될 것 같다.
문자열 합치는것은 +로 간단하게 적용할 수 있기 때문에 위와 같은 순서로 진행해보자
우선 phone_number의 뒤의 4자리를 slice로 받아와보자
slice로 문자열을 뒤에서부터 자르기 위해서는 뒤에서부터 몇 번째인지 확인하고 -를 붙여주면 된다.
var 자를글자 = '가나다라마바사';
//'마바사' 만 잘라내고 싶음 (뒤에서 3번째)
var 결과 = 자를글자.slice(-3);
위의 slice를 적용하면 answer에 뒤에 4자리만 받아와줄 수 있다.
function solution(phone_number) {
var answer = '';
if( 4 <= phone_number <= 20) {
answer = phone_number.slice(-4)
}
return answer;
}
그럼 이제 변수를 두 개로 나눠야하기 때문에 slice(-4)로 받아온 뒤의 4글자는 second 라는 변수로 할당하고
앞의 글자는 first라는 변수로 할당해준다.
first 변수에는 앞에서부터 뒤에서 5번째 글자까지가 필요하다. 그럼 인덱스 0번부터 뒤에서 -4번째 글자 앞에서 잘라내면 되니까 -4를 입력해주면 된다.
아래와 같이 first 변수에 0번째부터 뒤에서 -5번째 글자까지를 할당한다.
function solution(phone_number) {
var answer = '';
var first;
var second;
if( 4 <= phone_number <= 20) {
first = phone_number.slice(0, -4)
}
return first;
}
아까전에 만들어 둔 뒤에서부터 4번째 글자 slice를 second에 할당한다.
function solution(phone_number) {
var answer = '';
var first;
var second;
if( 4 <= phone_number <= 20) {
first = phone_number.slice(0, -4);
second = phone_number.slice(-4);
}
return second;
}
그리고 first를 replace 메소드를 이용해 모두 *로 치환해준다.
이 때 replace에서는 바꿀 문자열을 지정해주어야 하는데, 우리는 first 변수 안의 모든 글자를 변환해야 하기 때문에 정규식이 필요하다.
만들어둔 first는 모두 숫자이기 때문에 모든 숫자를 선택하는 /[0-9]/g 정규식을 replace 메소드의 첫번째 인자로 준다.
function solution(phone_number) {
var answer = '';
var first;
var second;
if( 4 <= phone_number <= 20) {
first = phone_number.slice(0, -4).replace(/[0-9]/g,'*');
second = phone_number.slice(-4);
}
return first;
}
원하는 모양이 나왔기 때문에 answer에 first와 second를 이어 할당해준다.
function solution(phone_number) {
var answer = '';
var first;
var second;
if( 4 <= phone_number <= 20) {
first = phone_number.slice(0, -4).replace(/[0-9]/g,'*');
second = phone_number.slice(-4);
answer = first + second;
}
return answer;
}
분명 더 좋은 답이 있을거라 내일 한 번 다른 사람의 풀이를 봐야겠다.
'WEB Dev > CordingTEST' 카테고리의 다른 글
[매일코딩-프로그래머스] 직사각형 별찍기 02 (0) | 2022.01.12 |
---|---|
[매일코딩-프로그래머스] 직사각형 별찍기 01 (0) | 2022.01.11 |
[매일코딩-프로그래머스] 문자열 다루기 기본 03 (0) | 2022.01.05 |
[매일코딩-프로그래머스] 문자열 다루기 기본 01, 02 (0) | 2022.01.04 |
[매일코딩-프로그래머스] 완주하지 못한 선수 02 + Hash란? (0) | 2021.12.28 |