본문 바로가기
Algorithms/코테 문풀

[프로그래머스] 영어가 싫어요 - JavaScript 풀이/ 문자열을 숫자로 바꾸는 3가지 방법

by hi-rachel 2023. 1. 4.

✏️ 문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 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 합니다.

입출력 예 #1

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

 

✏️ 문제 풀이

- 내 풀이

function solution(numbers){
    let stringToNumber={
        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, (n) => {
        return stringToNumber[n];
    })
    return Number(num);
}

 

dictionary에 조건을 넣어놓고 바꿔주고 싶었는데 다 붙어있는 string을 어떻게 나눠줘야 하나 막혀서 다른 풀이를 참고했다. 공백 등으로 딱 나뉘는 부분이 없어 regex안에 바꾸고 싶은 조합을 모두 넣어준다 => replace로 regex에 맞는 각각의 값을 바꿔준다. => replace() 메서드는 새로운 문자열을 반환하기 때문에 Number()로 바꿔주어 반환.

 

[참고] String.prototype.replace()

더보기

String.prototype.replace()

replace() 메서드는 어떤 패턴에 일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환합니다. 그 패턴은 문자열이나 정규식(RegExp)이 될 수 있으며, 교체 문자열은 문자열이나 모든 매치에 대해서 호출된 함수일 수 있습니다.

pattern이 문자열인 경우, 첫 번째 문자열만 치환이 되며 원래 문자열은 변경되지 않습니다.

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
// replace Syntax
replace(pattern, replacement)

 

- 다른 풀이

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
}

numbers를 변수 number의 각 길이로 잘라주고 i로 바로 교체해주는 방법

 


 

<문자열을 숫자로 바꾸는 방법_ how to convert String into Number>

1. parseInt() 사용

더보기

parseInt()

parseInt() 함수문자열 인자를 파싱(parsing)하여 특정 진수(수의 진법 체계에서 기준이 되는 값)정수(Int)를 반환한다.

(--- float값을 원하면 parseFloat() 사용)

 

파싱이란(Parsing)?

syntax analysis 또는 syntactic analysis(구문 분석)자연어, 컴퓨터 언어 또는 데이터 구조로 된 일련의 기호를 공식 문법 규칙에 따라 분석하는 프로세스이다.

 

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
// parseInt() Syntax
parseInt(string)
parseInt(string, radix)

- string : 파싱할 값

- radix : string의 진수를 나타내는 2부터 36까지의 정수(2~36진수까지 정의 가능), 선택값으로 지정하지 않을 경우 10진수로 parse 한다.

 

2. + : 단항 연산자(the unary operator) 사용

더보기

▶ +

+op;

여기서 op는 피연산자(operand)이다. 단항 연산자 +는 피연산자 앞에 위치하며 피연산자를 숫자로 변환해 반환한다.

 

3. Number() 사용

더보기

Number()

Number 함수로 호출되면 매개변수를 숫자(primitive)로 강제 변환한다. BigInt는 숫자로 변환됩니다. 값을 변환할 수 없으면 NaN를 반환한다.

// https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/Number
Number(value)

(Number은 37 or -9.25과 같은 부동 소수점 숫자(floating-point numbers)를 나타낸다.)

 

Number() 생성자(constructor)는 Number 개체를 만든다. ※거의 사용하지 않음. (위 예시와 다른 값 생성) 

new Number(value)

 

참고 사이트

mdn

How to convert a string into integer in JavaScript?