[프로그래머스] 영어가 싫어요 - JS

Lenny·2023년 4월 24일

문제

풀이

function solution(numbers) {
    var answer = Number(numbers.replace(/(zero)/g, "0").replace(/(one)/g, "1").replace(/(two)/g, "2").replace(/(three)/g, "3").replace(/(four)/g, "4").replace(/(five)/g, "5").replace(/(six)/g, "6").replace(/(seven)/g, "7").replace(/(eight)/g, "8").replace(/(nine)/g, "9"));
    return answer;
}

보자마자 정규식으로 풀어야겠다고 생각은했는데.. 이건 좀 아닌거같다.

그래서 이번에는 깔끔하게 푼 다른사람의 풀이를 가져와서 분석하도록 하겠다.

다른 사람의 풀이

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 함수의 콜백의 활용인것같다.

replace의 콜백함수 v에는 매치된 문자열이 넘어온다.

그리고 정규식 패턴에 /g 가 붙어있으면 정규 표현식에 일치하는 모든 문자열에 대해서 함수가 실행된다.

map 함수같은 느낌이라고 생각하면 될듯.

그래서 대괄호 표기법으로 각각 객체의 key로 value를 찾아서 num에 return 하고 마지막에는 숫자로 타입을 캐스팅 해주는 풀이.

profile
🧑‍💻

0개의 댓글