염딩코

[JavaScript] 프로그래머스 Lv.0 영어가 싫어요 본문

알고리즘 PS/Javascript

[JavaScript] 프로그래머스 Lv.0 영어가 싫어요

johnyeom 2023. 9. 15. 11:47

 

풀이

function solution(numbers) {
    const arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];

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

    return Number(numbers);
}

 

arr로 각 숫자를 구분하기 위해서 나열하는 것은 필수의 과정인 것 같다.

다만, 이것을 객체로 할 것인지 혹은 배열로 할 것인지에 따라 풀이 과정이 달라진다.

 

배열로 푼다면 replaceAll 메서드를 활용할 수도 있다.

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

    wordMap.forEach((str, idx) => {
        numbers = numbers.replaceAll(str, idx);
    });
    return Number(numbers);
}

 

만약 wordMap을 객체로 구성했다면 아래와 같이 풀 수 있다.

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) => {
        return obj[v];
    });

    return Number(num);
}

replace 메서드는 특정 패턴을 찾아 다른 문자열로 대체하는 문자열 메서드이다. 

 

g는 정규표현식에서 사용되는 플래그중 하나로 global을 의미한다는 것을 인지하고 가면 좋겠다.

이 플래그를 사용하면 문자열 내에서 해당 패턴과 일치하는 모든 부분을 찾아서 대체할 수 있다는 것이다.

g를 사용하지 않으면 문자열 내에서 첫 번째로 일치하는 것만 대체한다.