전화 번호의 끝 4자리를 제외하고 앞자리를 모두 '*'로 치환하고 싶었음.
function solution(s) {
for (let i = 0; i < s.length - 4; i++) {
console.log(s[i]);
String(s[i]).replace(/./g, '*');
}
return s;
}
console.log(solution('027778888'));
그래서 이렇게 구성했는데,,, 곧 죽어도 절대 *로 치환이 안되는 것이다.
심지어 범위 정의도 제대로 했는데 왜그러지? 싶어서 지피티 선생님을 찾아가니까,
이 코드는 s 문자열 자체를 수정하지 않고, 매 루프마다 s[i]의 복사본을 변경할 뿐입니다. replace 메서드는 문자열을 직접 변경하는 게 아니라, 변경된 새 문자열을 반환하기 때문에 원본 문자열 s는 그대로 남아 있습니다.
때문에 나는 계속 변경이 반영된 문자열을 출력하는게 아니라, 매 루프마다 새로운 복제본만 수정하고 있어서 반영이 안되고 있던거였음.
function solution(s) {
let converted = '';
for (let i = 0; i < s.length - 4; i++) {
converted += '*';
}
return (converted += s.slice(-4));
}
console.log(solution('027778888'));
때문에 위 처럼 아예 정답으로 리턴시킬 빈 문자열을 하나 만들고, *를 replace로 치환하는 방식이 아니라 카운트 당 하나씩 추가되는 로직으로 수정함.
반복 출력이라는 점을 감안 하면, 아래 코드로 깔끔하게 정리 가능할 듯 하다
function solution(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
return result;
}
//repeat(count)
"abc".repeat(-1); // RangeError
"abc".repeat(0); // ''
"abc".repeat(1); // 'abc'
이런 식으로 반복시킬 문자열 뒤에 사용할 수 있음