본문 바로가기
기초다지기/JS 코딩테스트

javaScript 숫자단어 문자열을 숫자로 변경하기

by 김빵그 2023. 11. 15.

문제 

문자열 일부를 숫자로 리턴하여라

나의 풀이 

function solution(s) {
  const numberToWord = {
    0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
    5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'
  };

  let word = '';
  let number = '';

  for (let char of s) {
    if (isNaN(char)) {
      word += char;
      if (Object.values(numberToWord).includes(word)) {
        number += Object.keys(numberToWord).find(key => numberToWord[key] === word);
        word = '';
      }
    } else {
      number += char;
    }
  }

  return Number(number);
}
  • numberToWord 객체를 통해 숫자와 영단어 매핑
  • 반복문 for..of
    • isNaN 현재 문자가 숫자인지 체크하고 그에 따라 word number에 문자를 추가한다
    • numberToWord 객체에 속한 영어단어가 현재 word에 포함되어있는지 확인후 들어 있다면 현재까지 word에 해당하는 숫자를 찾아 number에 추가한다

다른 풀이

function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    var answer = s;

    for(let i=0; i< numbers.length; i++) {
        let arr = answer.split(numbers[i]);
        answer = arr.join(i);
    }

    return Number(answer);
}
  • 답변 보자마자 좀 띵했다.. 왜 생각을 못했을까
  • for 반복문
    • s 문자는 split 함수와 join 함수를 사용하여 문자열을 분리하고 결합한다
function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];

    for (let i = 0; i < numbers.length; i++) {
        let regex = new RegExp(numbers[i], 'g');
        s = s.replace(regex, i);
    }

    return Number(s);
}
  • 정규식 표현을 사용하여 문자열을 index 숫자로 변경한다