[프로그래머스] Lv.0 영어가 싫어요 JavaScript

Janet·2023년 4월 10일
0

Algorithm

목록 보기
128/314

문제 설명

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

문제풀이

💡 문제풀이 과정

  • 답안 1번: ‘zero’부터 ‘nine’까지 nums라는 상수에 배열 형태로 값들을 담는다. 그리고 numsmap()replaceAll()을 이용하여 numbers = numbers.replaceAll(nums의 value, nums의 index)를 인자로 입력한다. 이후 숫자 타입으로 변형한 numbers를 리턴한다. 위와 비슷한 방법으로 map()함수를 사용하고 replaceAll()이 아닌 split()join()을 이용하는 방법도 있다. map() 함수 내에서 numbers = numbers.split(nums의 value).join(nums의 index); 하면 주어진 매개변수 numbersnums 배열의 값들로 분할 되었다가 nums 배열 값들의 인덱스들을 기준으로 연결해 하나의 문자열로 만든다.
  • 답안 2번: 다른 사람의 풀이로 객체에 다음과 같이 데이터를 담는다. { zero : 0, one : 1, … nine : 9 }; 그리고 replace()를 이용하여 오브젝트의 key에 해당하는 value를 반환한다. numbers.replace(/zero|one|…|nine/g, (v) ⇒ obj[v]); 마지막으로 number를 숫자 타입으로 리턴해 준다.

✅ 답안 #1

function solution(numbers) {
  const nums = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
  nums.map((v, i) => (numbers = numbers.replaceAll(v, i)));
  // nums.map((v, i) => (numbers = numbers.split(v).join(i)));

  return +numbers;
  // return Number(numbers);
}

✅ 답안 #2

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) => obj[v]
  );

    return Number(num);
}
profile
😸

0개의 댓글