영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 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);
}