🗃️javascript/프로그래머스

영어가 싫어요(Lv.0)[replace(제거할 문자열, 대체 문자열) + 객체사용]

하얀성 2023. 3. 16. 19:24

 

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


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

입출력 예numbersresult
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067

입출력 예 설명

입출력 예 #1

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

입출력 예 #1

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

<제출 답안>

function solution(numbers) {
    let arr = {0:"zero", 1:"one", 2:"two", 3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine" }

    let arr2 = [...numbers]
    let collabo = [];
    let name = '';
    for(let i=0; i<arr2.length; i++) { // 문자열 결합
        collabo.push(arr2[i])
        if(collabo.length>=3){ // 문자열이 3이상일 때
            let name2 = collabo.join("")

            for(let k=0; k<=9; k++){ //arr 중에서 같은것 있나 찾기
                if(arr[k] == name2){ // 같은게 나오면 name에 추가.
                     name += k
                     collabo.splice(0,) // 문자열 결합은 초기화.
                }
            }
         }    
    }
    return Number(name)
}

<다른 답안>

객체를 선언할 땐 const를 사용한다.

{

내용

}

이런식으로 깔끔하게 선언한다.

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()와 replaceAll()의 차이점

replace(str1, str2)는 어떤 문자열 str1을 다른 문자열 str2로 변환하는 함수입니다.

replaceAll(pattern, str1)도 replace()처럼 어떤 문자열을 다른 문자열로 변환하지만, 기본적으로 인자로 전달된 정규표현식 패턴(pattern)과 일치하는 문자열들을 다른 문자열(str1)로 변환합니다.