[프로그래머스-기초]특정한 문자를 대문자로 바꾸기

JiEun·2023년 5월 24일
0

코테/코플릿

목록 보기
18/56

특정한 문자를 대문자로 바꾸기

문제 설명

영소문자로 이루어진 문자열 my_string과 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때, my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항

1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_stringalpresult
"programmers""p""Programmers"
"lowercase""x""lowercase"

입출력 예 설명

입출력 예 #1
예제 1번의 my_string은 "programmers"이고 alp가 "p"이므로 my_string에 모든 p를 대문자인 P로 바꾼 문자열 "Programmers"를 return 합니다.
입출력 예 #2
예제 2번의 alp는 "x"이고 my_string에 x는 없습니다. 따라서 "lowercase"를 return 합니다.

💻 내가 작성한 코드

function solution(my_string, alp) {
    let arr = my_string.split("")
    return arr.map((el) => el === alp ? el.toUpperCase() : el).join("")
}

my_string을 배열로 만들어준 다음 split()
map()을 이용해 해당 요소가 alp와 같다면 대문자toUpperCase()로 반환하고 그렇지 않을 경우 그대로 둔다.

map()은 배열로 반환하기 때문에 join("")을 해준다.

💻 다른 사람이 작성한 코드

function solution(my_string, alp) {
    let re = new RegExp(alp, "g");
    return my_string.replace(re, alp.toUpperCase());
}

이전에 알게 되었던 replaceAll과 비슷한 메서드다.

new RegExp()?

정규 표현식 객체(RegExp object)를 생성하기 위해 사용되는 생성자 함수이다.
new RegExp(pattern, flags)

  • pattern : 정규 표현식의 패턴을 나타내는 문자열
  • flags : 정규 표현식의 플래그를 나타내는 문자열
    - g (전역검색), i (대소문자 구분없는 검색), m (여러 줄 검색)

let re = new RegExp(alp, "g");
alp를 전역적으로 검색하게 하는 정규 표현식 객체를 re에 할당 했다.

replace()? replaceAll()?

replace(), replaceAll() 둘 다 문자열에서 패턴을 찾아 대체하는 메서드 이다.

  • replace() : 첫 번째로 일치하는 패턴만 대체한다.
  • replaceAll() : 전역적으로 일치하는 모든 패턴을 대체한다.

❗️ replaceAll() 메서드는 ECMAScript 2021 부터 도입되 이전 버전의 JS에서는 지원하지 않을 수 있다고 한다.


✏️ 마치며

해당 문제를 봤을 때 이전에 알게 된 replaceAll()으로 풀어보자고 했지만 생각대로 풀리지 않았다.

그래서 항상 푸는 방식인 문자열을 배열로 반환하고 map()을 사용해 join()하는 방식이였다.

이번에 replace(), replaceAll()은 정확히 짚고 넘어갔으면 좋겠다.

profile
💻 프론트엔드를 목표로 성장 중! (알아봤던 내용 등을 정리하기)

0개의 댓글