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

javascript 영문으로 표기된 숫자 문자열을 숫자의 수로 변경하기

by 김빵그 2023. 8. 26.

문제

영문으로 되어있는 문자를 숫자로 변경하라

 

코드 풀이(정규식 사용)

function solution(numbers) {
    var en = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    for(let i = 0; i< en.length; i++) {
        numbers= numbers.replace(new RegExp(en[i], "g"), i);
    }
     return parseInt(numbers);
}
  • 영단어 배열 en, 인덱스 i와 배열 내 원소 en[i]를 사용해 각 숫자에 해당하는 영단어를 찾아낼 수 있다
  • for 반복문을 사용해 각 영단어를 숫자로 대체한다
  • numbers.replace를 사용해 number 문자열 내에 en[i]에 해당하는 모든 패턴을 찾아 i로 대체 정규식 표현을 사용해 모든 일치하는 패턴을 검색해 대체할 수 있다
  • RegExp... en[i]에 해당하는 영단어를 찾기 위한 정규 표현식 생성 g 플래그는 모든 일치하는 패턴을 찾아내는 전역 검색을 수행
  • paresInt를 사용해 문자열로 된 숫자를 정수로 변환한다

다른 풀이

1) split 사용

function solution(numbers) {
    const number = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    for (let i = 0; i < number.length; i++) {
        numbers = numbers.split(number[i]).join(i);
        
    }
    return +numbers;
}

////
[ 'onetwothreefourfivesixseveneightnine' ]
[ '', 'twothreefourfivesixseveneightnine' ]
[ 'one', 'threefourfivesixseveneightnine' ]
[ 'onetwo', 'fourfivesixseveneightnine' ]
[ 'onetwothree', 'fivesixseveneightnine' ]
[ 'onetwothreefour', 'sixseveneightnine' ]
[ 'onetwothreefourfive', 'seveneightnine' ]
[ 'onetwothreefourfivesix', 'eightnine' ]
[ 'onetwothreefourfivesixseven', 'nine' ]
[ 'onetwothreefourfivesixseveneight', '' ]
  • for문 사용은 위의 코드와 동일
  • numbers.split(number[i]) 를 사용해 numbers 문자열을 number[i]에 해당하는 모든 패턴으로 분할후 숫자 i로 결합
  • +numbers 문자열을 숫자로 변환하는 간단한 방법중 하나 단항 연산자 + 를 사용한다

2) forEach 사용

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

    numStr.forEach((str, idx) => {
        numbers = numbers.replaceAll(str, idx);
    });
    return Number(numbers);
}
  • numStr 배열을 순회하며 각 영단어를 숫자로 대체한다
  • Number(numbers) 문자열을 숫자로 변환

주절주절

  • forEach를 왜 생각을 못해서 .. 정규식표현까지 써가면서 짠건지 생각하는 힘을 기르자!