
다음과 같이 숫자를 나타내는 영단어와 숫자가 섞여있는 문자열이 주어졌을 때, 영단어를 숫자로 바꾸는 문제다.
예시) "one4seveneight" -> 1478
const word = ["zero","one","two","three","four","five","six","seven","eight","nine"];
영단어는 zero(0)부터 nine(9)까지 있으므로 배열을 이용해 인덱스와 영단어를 매칭시켜서 저장한다.
let answer = '';
const isDigit = (n) => /\d/.test(n);
while(s.length > 0){
// 모든 영단어를 순회하며 s가 영단어로 시작하는지 확인
for(let i=0; i<=9; i++){
// 만약 영단어로 시작한다면 그때의 인덱스(숫자)를 정답에 저장하고, 영단어 지우기
if(s.startsWith(word[i])) {
answer += i;
s = s.replace(word[i],'');
}
// 숫자와 영단어가 교체되지 않았다면 숫자이므로 숫자를 정답에 저장
if(isDigit(s[0])){
answer += s[0];
s = s.replace(s[0], '');
}
}
그리고 문자열을 순회하며 문자열이 word에 있는 단어로 시작할 경우 그때의 번호(인덱스)를 answer에 저장하고 해당 단어를 문자열에서 제거해준다. replace함수는 첫 번째 인자로 전달된 문자열과 일치하는 첫 번째 문자열을 두 번째 인자의 값을 치환한다.
그리고 s[0]이 숫자라면 정답에 해당 숫자를 저장하고 문자열에서 제거해준다.
문자열의 길이가 0이 될때까지 이 과정을 반복한다.
// 결과는 정수형이여야 하므로 문자열을 정수로 변환
return +answer;
결과는 문자열이 아니라 정수형으로 출력되어야 하므로 문자열을 숫자로 변환해준다. (+를 이용한 암묵적 변환)
