[프로그래머스] 숫자 문자열과 영단어 (자바스크립트/javascropt)

스카치·2023년 2월 22일
0

문제

풀이 1

function solution(string) {
    var answer = '';
    let list = ['zero','one','two','three','four','five','six','seven','eight','nine','ten']
    let check = ''
    for (let s of string) {
        check += s
        if (!isNaN(s)) {
            answer += s; 
            check = ''
        }
        else if (list.indexOf(check) !== -1) {
            answer += list.indexOf(check)
            check = ''
        }
        
    }
    return answer*1;
}

풀이 2

split과 join을 이용해 문자열일 때 나누고 숫자로 다시 합친다.

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);
}

풀이 3

digit2word 배열을 reduce로 돌며 문자열s를 정규표현식으로 검사해 해당하는 문자를 숫자로 replace한다.

const digit2word = ['zero','one','two','three','four','five','six','seven', 'eight','nine']
function solution(s) {
    return Number(digit2word.reduce((ans, word, digit) => ans.replace(new RegExp(word, 'g'), digit), s));
}

풀이 4

정규표현식을 이용한 극단적 풀이

function solution(s) {
    s = s.replace(/zero/gi, 0)
    .replace(/one/gi, 1)
    .replace(/two/gi, 2)
    .replace(/three/gi, 3)
    .replace(/four/gi, 4)
    .replace(/five/gi, 5)
    .replace(/six/gi, 6)
    .replace(/seven/gi, 7)
    .replace(/eight/gi, 8)
    .replace(/nine/gi, 9)
    return parseInt(s);
}

풀이 5

Object를 이용해 문자열과 숫자를 key, value로 나누어 replace로 교체

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

    for(let [key, value] of Object.entries(charSet)) {
        let re = new RegExp(`${key}`,"g");
        s = s.replace(re, value);
    }
    return parseInt(s);
}

0개의 댓글