function solution(s) {
var answer = 0;
answer = parseInt(s.replace('one', 1).replace('two', 2).replace('three', 3).replace('four', 4).replace('five', 5).replace('six', 6).replace('seven', 7).replace('eight', 8).replace('nine', 9).replace('zero', 0))
return answer;
}
너무 쉽게 주워먹으려고 했나. 연속된 숫자 ex)11 에 대해서는 인식이 안되더라
결국 이렇게 해결했다.
function solution(s) {
var answer = 0;
let arr = [];
let str = "";
let string = "";
const test = s.split("")
for (let i = 0; i < test.length; i++) {
if(test[i].charCodeAt() > 47 && test[i].charCodeAt() < 58) {
arr.push(parseInt(test[i]))
str += (test[i])
string = "";
continue;
}
string += test[i]
// console.log('string2:', string)
if(string.indexOf('one') !== -1) {
arr.push(1)
str += '1'
string = "";
} else if(string.indexOf('two') !== -1) {
arr.push(2)
str += '2'
string = "";
} else if(string.indexOf('three') !== -1) {
arr.push(3)
str += '3'
string = "";
} else if(string.indexOf('four') !== -1) {
arr.push(4)
str += '4'
string = "";
} else if(string.indexOf('five') !== -1) {
arr.push(5)
str += '5'
string = "";
} else if(string.indexOf('six') !== -1) {
arr.push(6)
str += '6'
string = "";
} else if(string.indexOf('seven') !== -1) {
arr.push(7)
str += '7'
string = "";
} else if(string.indexOf('eight') !== -1) {
arr.push(8)
str += '8'
string = "";
} else if(string.indexOf('nine') !== -1) {
arr.push(9)
str += '9'
string = "";
} else if(string.indexOf('zero') !== -1) {
arr.push(0)
str += '0'
string = "";
}
}
// console.log('arr:', arr.join())
// console.log('str:', str)
answer = parseInt(str)
return answer;
}
다행히 10개만 비교하면 되니까 이런 코드로도 가능했던 것 같다.
근데 내가 너무 charCodeAt을 자주쓰나 이런 걱정이 좀 들기도 했다.
다른 사람의 풀이를 보다가 parseInt 보다는 Number로 해주는게 더 효율적이란 피드백도 봤다.
가만히 보니까 if문도 저렇게 말고 for 문으로 구성하고 zero~nine까지는 배열하나 만들어서 돌려도 좋았겠다 싶다.
다른 분 코드 중에 기가막힌게 있었다.
numbers = ['one', 'two',,,,]
for(let i = 0; i< numbers.length; i++){
let a = string.split(numbers[i])
// 내가 split을 못썼던 이유이다. one을 쪼깨면 o,n,e 이렇게 쪼갤줄 알고... 바보놈
let b = a.join(i)
// 못쓴 두번째 이유. join()만 쓸줄 알았따.
//각 배열의 요소를 파라미터로 연결해줄수 있다. join은 연결이긴하지만 잘 이용한 사례.
}