숫자 문자열과 영단어

정태수·2025년 3월 18일
post-thumbnail

카카오 채용연계형 인턴십 문제

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은 연결이긴하지만 잘 이용한 사례.
}

교훈

  1. parseInt말고 Number가 더 좋다고 한 피드백?
  2. split('분리하고자하는 letter')
  3. join('새롭게 추가? or 연결하고자하는 letter')
profile
프론트엔드 개발자

0개의 댓글