영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers
가 매개변수로 주어질 때, numbers
를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
numbers
는 소문자로만 구성되어 있습니다.numbers
는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.numbers
의 길이 ≤ 50numbers
의 맨 앞에 올 수 없습니다.numbers | result |
---|---|
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
입출력 예 #1
입출력 예 #1
💡 문제풀이 과정
- 답안 1번:
‘zero’부터 ‘nine’까지
nums
라는 상수에 배열 형태로 값들을 담는다. 그리고nums
에map()
과replaceAll()
을 이용하여numbers = numbers.replaceAll(nums의 value, nums의 index)
를 인자로 입력한다. 이후 숫자 타입으로 변형한numbers
를 리턴한다. 위와 비슷한 방법으로map()
함수를 사용하고replaceAll()
이 아닌split()
과join()
을 이용하는 방법도 있다.map()
함수 내에서numbers = numbers.split(nums의 value).join(nums의 index);
하면 주어진 매개변수numbers
는nums 배열의 값들로 분할
되었다가nums 배열 값들의 인덱스
들을 기준으로 연결해 하나의 문자열로 만든다.- 답안 2번: 다른 사람의 풀이로
객체
에 다음과 같이 데이터를 담는다.{ zero : 0, one : 1, … nine : 9 };
그리고replace()
를 이용하여 오브젝트의key
에 해당하는value
를 반환한다.numbers.replace(/zero|one|…|nine/g, (v) ⇒ obj[v]);
마지막으로number
를 숫자 타입으로 리턴해 준다.
✅ 답안 #1
function solution(numbers) {
const nums = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
nums.map((v, i) => (numbers = numbers.replaceAll(v, i)));
// nums.map((v, i) => (numbers = numbers.split(v).join(i)));
return +numbers;
// return Number(numbers);
}
✅ 답안 #2
function solution(numbers) {
const obj = {
zero: 0, one: 1, two: 2, three: 3, four: 4,
five: 5, six: 6, seven: 7, eight: 8, nine: 9
};
const num = numbers.replace(
/zero|one|two|three|four|five|six|seven|eight|nine/g,
(v) => obj[v]
);
return Number(num);
}