카테고리 없음

[TIL] JavaScript 알고리즘 100일 챌린지 27번째 도전

whale3 2023. 5. 31. 23:37
numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
	return obj[v]
})​
numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
	return obj[v]
})

숫자의 영어 이름으로 이루어진 문자열이 주어지면 각 영단어를 정수 숫자로 바꾼 것을 리턴하는 문제였다.

내가 접근한 방식은 replaceAll을 사용하는 거였다.

1. 각 영단어에 매칭되는 숫자들을 가진 object 준비 (Map을 사용하고 싶었으나 귀찮았음...)

2. 1번 object에서 키만 뽑아내서 반복문을 돌며 각 단어마다 문자열에다 replaceAll로 찾아서 매칭되는 숫자로 변환해준다

3. parseInt 를 사용해 number 타입으로 만들어서 리턴

 

replaceAll는 새로운 문자열을 리턴하기 때문에 매 loop 마다 변수에 replaceAll의 결과를 담았다. 그래야 그 다음 loop 돌때 이전 loop에서 작업해둔 걸 이어서 사용하니까..

이 방법 나름 괜찮다 생각했는데....

아래 영상에서는...

이런 식으로 꼬리 물듯이 풀었다.

return +numbers.replaceAll('one', '1').replaceAll('two', '2').replaceAll('three', '3').replaceAll('four', '4').replaceAll('five', '5').replaceAll('six', '6')

 

 

소개된 또 다른 방법은 replace, 정규식을 사용하는거였다. 두번째 파라미터에 함수도 올 수 있구나..

 

numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
	return obj[v]
})

 

https://youtu.be/sHHZKjOWUJE

 

반응형