문제(출처: 프로그래머스)
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 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 가 출력된다.
'프로그래밍 > 코딩연습' 카테고리의 다른 글
[ JS 코딩연습 ] OX 퀴즈 (0) | 2024.05.13 |
---|---|
[ JS 코딩연습 ] 문자열 계산하기 (0) | 2024.05.12 |
[JS 코딩연습] 369 게임 (0) | 2024.05.11 |
[ JS 코딩연습 ] 가까운 수 (0) | 2024.05.11 |
[ JS 코딩연습] 중복된 문자 제거 (0) | 2024.05.11 |