대문자로 이루어진 영어단어가 입력되면 단어에 포함된 ‘A'를 모두 ’#‘으로 바꾸어 출력하는 프로그램을 작성하세요.
function solution(s){
let answer=s;
answer = answer.replace(/A/g,"#");
return answer;
}
let str="BANANA";
console.log(solution(str));
정답 풀이와 같다
function solution(s){
let answer="";
for (let x of s) {
if(x === 'A') answer += '#';
else answer += x;
}
return answer;
}
let str="BANANA";
console.log(solution(str));
replace()
의 인자는 2개로,특정 대상
을 해당 대상
으로 바꾸도록 하는 함수이다. 하지만, python의 replaceAll()
과 달리, javascript의 replace()
는 replaceAll()
함수가 따로 존재하지 않는다. 따라서 MDN 정규 표현식 문서를 참고하여 정규 표현식을 통해 모든 대상을 의미하는 g
를 통해 replaceAll()
의 기능을 하도록 했다.
앞선 문제 풀이에서 얕은 복사라는 개념을 알았다. 따라서 이번 문제에서도, let answer = s;
를 통해 얕은 복사
를 했다고 생각했는데, answer = answer.replace(/A/g,"#");
를 s = s.replacE(/A/g,"#");
로 바꾸어 보았을 때, 아무런 변화 없이 "BANANA"
가 출력되었다. 문자열의 경우, Number
, Undefined
와 같은 원시값 (String) 이기 때문에 주소 값을 복사하는 얕은 복사
의 개념이 존재하지 않는다.