Algorithm JS | 프로그래머스 코딩테스트_rny_string

앙두·2023년 5월 23일
0

Algorithm

목록 보기
8/17

📑 문제

  • 숫자배열에 m이 있으면 rn으로 변경해서 return
  • rn이 있으면 그대로 return
  • m이 없으면 그대로 return
  • 숫자배열은 영소문자로만 구성

🤓 나의 풀이

const solution = (rny_string) => rny_string.replace(/m/g, 'rn');

메서드만 잘 알고 있으면 쉬운 문제이긴 했다.
문자열 요소를 치환해주는 replace()를 사용하여,
문자열 내 m을 모조리 찾아주는 정규식표현을 첫번째 파라미터에 입력,
두번째 파라미터에는 치환시킬 요소 넣어주면 된다.

replace()를 쓸 생각 하기 전에 여러 시도를 하고 검색을 했는데,
어머낫 중요한 지식을 얻었다..! 🪄 👇🏻

+++
나의 첫 시도는, mindex를 찾아 그 index를 활용하여 splice() 를 사용하려고 했다.
근데 자꾸 TypeError(splice is not a function) 가 뜨는 것 ! 🤨

string이 배열로도 사용되는 걸로 알아서, 배열 메소드를 사용한건데 무엇이 문제인가! 하고 지피티오빠한테 물어봤더니...

string은 자바스크립트에서 원시 타입으로, 불변한 값(immutable value)
splice()원본 배열에 변경을 일으키는 메서드로, 불변한 값에 사용하지 못하는 메서드

라는 지식을 얻을 수 있었다. JS 기초 구멍 하나씩 메꾸는 중 ...


👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

1. replaceAll()

const solution = (rny_string) => rny_string.replaceAll('m', 'rn');

사실 replaceAll() 쓰면 정규식 표현 안 써도 된다.
첫번째 파라미터 요소를 모조리 찾아주는 기능이 내장돼있다.

2. map()

function solution(rny_string) {
    var answer = '';
    return [...rny_string].map(e => e == 'm' ? 'rn' : e).join("");
}

map()을 사용하여 이렇게 풀 수도 있겠구나 싶어서, 참고하려고 가져왔다.

+ 설명 👇🏻

const fakeString = 'macdonaldmm'

function solution(s) {
  console.log([...s])
  // [ 'm', 'a', 'c', 'd', 'o', 'n', 'a', 'l', 'd', 'm', 'm' ]
  // 1. spread operator를 사용하여 문자열을 배열로 만들어줌
  console.log([...s].map(el => el === 'm' ? 'rn' : el))
  // [ 'rn', 'a', 'c', 'd', 'o', 'n', 'a', 'l', 'd', 'rn', 'rn' ]
  // 2. map() 사용하여 새 배열로 반환
  console.log([...s].map(el => el === 'm' ? 'rn' : el).join('')) // 'rnacdonaldrnrn'
  // 3. join의 구분자(seperator)를 아무것도 없이('') 주어 한 단어로 합침
  
  return [...s].map(el => el === 'm' ? 'rn' : el).join("")
}

solution(fakeString); // 'rnacdonaldrnrn'

메소드를 사용하고 응용하며 기초를 배워가는 재미가 있다.
오늘도 코테연습 끝! 💫

profile
쓸모있는 기술자

0개의 댓글