문제(출처: 프로그래머스)

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

 

제한사항

  • numbers는 소문자로만 구성되어 있습니다.
  • numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers의 길이 ≤ 50
  • "zero"는 numbers의 맨 앞에 올 수 없습니다.

▶ 내가 푼 방식

const stringToNumber = {
    "zero": 0,
    "one" : 1,
    "two": 2,
    "three": 3,
    "four" : 4, 
    "five" : 5,
    "six" :6 , 
    "seven" : 7, 
    "eight" : 8, 
    "nine" :9  
}

function solution(numbers) {
    var answer = [];
    var temp = ''
    for (let i of numbers){
        temp += i
        if(stringToNumber[temp] === 0 | stringToNumber[temp] ){
            answer.push(stringToNumber[temp])
            temp = ''
        }
    }
    return Number(answer.join(''))
}

 

 다른 유저가 푼 방식

// 유저 1
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);
}

// 유저 2
function solution(numbers) {
    let numStr = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" ];
	
    // zero 라는 문자를 가진 모든 문자를 idx(0) 으로 변경
    numStr.forEach((str, idx) => {
        numbers = numbers.replaceAll(str, idx);
    });
    return Number(numbers);
}

// 유저 3
function solution(numbers) {
    let d = ['zero', 'one','two','three','four','five','six','seven','eight','nine'];
    for (let i in d) numbers = numbers.replace(new RegExp(d[i], 'g'), +i);
    return +numbers;
}

 

 배운 것들

     -  replace의 새로운 사용방법

     -  만약에 const number = '1234' ->  +number 하면 1234 가 출력된다.   

+ Recent posts