문제 링크
https://programmers.co.kr/learn/courses/30/lessons/81301
문제
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
function solution(s) {
let tempString = "";
let answer = "";
const lettertonum = [
{ num: "0", letter: "zero" },
{ num: "1", letter: "one" },
{ num: "2", letter: "two" },
{ num: "3", letter: "three" },
{ num: "4", letter: "four" },
{ num: "5", letter: "five" },
{ num: "6", letter: "six" },
{ num: "7", letter: "seven" },
{ num: "8", letter: "eight" },
{ num: "9", letter: "nine" },
];
const test = Array.from(s).map((a) => {
if (isNaN(a)) {
tempString += a;
let letters;
letters = lettertonum.find((data) => data.letter === tempString);
if (letters) {
answer += letters.num;
tempString = "";
}
} else {
answer += a;
}
return answer;
});
return parseInt(test[test.length - 1]);
}
다 짜고보니 너무 복잡하게 짜버렸다는 걸 깨달음.
굳이 하나씩 map으로 돌리고 string으로붙여서 해당 영문이 되면 숫자로 바꾸는 것보다,
replaceall을 통해서 해당하는 영문을 한번에 다 숫자로 바꾸는 작업을 하는 게 훨씬 효율성이 좋을 것 같다.