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

이강혁·2023년 9월 8일
0

프로그래머스

목록 보기
3/82

https://school.programmers.co.kr/learn/courses/30/lessons/120894

문제설명

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

제한사항

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

입출력 예

numbers									result
"onetwothreefourfivesixseveneightnine"	123456789
"onefourzerosixseven"					14067

입출력 예 설명

입출력 예 #1

  • "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.

입출력 예 #2

  • "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.

코드

function solution(numbers) {
    return parseInt(numbers.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)
                           .replace(/zero/g, 0))    
}

0~9까지 replace 돌려버림.

다른 풀이

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를 할 때 v를 통해서 객체의 key가 전달되게 했음.

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
}

number 배열 돌면서 영어 숫자로 배열을 split 한 뒤에 숫자로 join함.

profile
사용자불량

0개의 댓글