'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
1 ≤ rny_string의 길이 ≤ 100
rny_string은 영소문자로만 이루어져 있습니다.
rny_string | result |
---|---|
"masterpiece" | "rnasterpiece" |
"programmers" | "prograrnrners" |
"jerry" | "jerry" |
"burn" | "burn" |
입출력 예 #1
예제 1번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.
rny_string | m | a | s | t | e | r | p | i | e | c | e |
---|---|---|---|---|---|---|---|---|---|---|---|
result | rn | a | s | t | e | r | p | i | e | c | e |
따라서 "rnasterpiece"를 return 합니다.
입출력 예 #2
예제 2번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.
rny_string | p | r | o | g | r | a | m | m | e | r | s |
---|---|---|---|---|---|---|---|---|---|---|---|
result | p | r | o | g | r | a | rn | rn | e | r | s |
따라서 "prograrnrners"를 return 합니다.
입출력 예 #3
예제 3번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "jerry"를 return 합니다.
입출력 예 #4
예제 4번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "burn"를 return 합니다.
function solution(rny_string) {
let arr = rny_string.split("")
let result = []
for(let i in arr){
if(arr[i] === "m"){
result.push("rn")
}else if(arr[i] !== "m"){
result.push(arr[i])
}
}
return result.join("")
}
문자열을 배열로 반환하고 for문
을 사용해 조건에 맞춰 result에 담고 반환해 주었다.
function solution(rny_string) {
let arr = rny_string.split("")
return arr.map((el) => el === "m" ? "rn" : el).join("")
}
map()
메소드와 삼항 연산자를 작성해 리팩토링 했다.
function solution(rny_string) {
return rny_string.replaceAll(/m/g, "rn");
}
replaceAll()
와 정규 표현식을 사용해 가지고 왔다.
replaceAll()?
string.replaceAll(searchValue, replaceValue)
- searchValue: 기존 패턴 또는 문자열
- replaceValue: 기존 문자열에서 변경 될 패턴 또는 문자열
문자열에서
searchValue
를 찾아replaceValue
로 변경해 새로운 문자열을 반환한다./m/g?
정규 표현식이다. 문자열에서 패턴을 매칭하고 검색 또는 대체를 수행하는데 사용되는 표현식
- / : 정규 표현식의 시작과 끝을 나타내는 구분 기호
- m : 'm'이라는 문자를 매칭하는 패턴
- g : 전역 검색을 수행하는 플래그, 문자열에서 해당 패턴과 일치하는 모든 부분을 찾는다.(생략시 첫 번째로 일치하는 부분만 찾는다.)
아직 모르는 메소드들이 많은 거 같다.
이렇게 하나씩 코팅 테스트를 풀어보면서
새롭게 알게된 메소드를 정리해 두고 두고 보는게 좋은 거 같다.
참고
chat GPT