코테 준비를 다시 시작해보자 - DFS&BFS

Anny·2024년 11월 3일
0

1. 문자열 일부만 수정하기

전화 번호의 끝 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;
  }

1-2. .repeat

//repeat(count)

"abc".repeat(-1); // RangeError
"abc".repeat(0); // ''
"abc".repeat(1); // 'abc'

이런 식으로 반복시킬 문자열 뒤에 사용할 수 있음

profile
Newbie

0개의 댓글