코딩테스트 (3) - 숫자 문자열과 영단어

GAHEE KIM·2022년 1월 23일
0

문제 링크
https://programmers.co.kr/learn/courses/30/lessons/81301

문제

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

생각의 흐름

  1. 들어오는 문자열중에 문자열만 걸러내기 (inNaN)
  2. 걸러진 문자열이 해당하는 숫자가 있는지 확인
  3. 해당하는 숫자가 있으면 글자대신 치환해서 출력

첫번째 시도

  function solution(s) {
    let tempString = "";
    let answer = "";
    const lettertonum = [
      { num: "0", letter: "zero" },
      { num: "1", letter: "one" },
      { num: "2", letter: "two" },
      { num: "3", letter: "three" },
      { num: "4", letter: "four" },
      { num: "5", letter: "five" },
      { num: "6", letter: "six" },
      { num: "7", letter: "seven" },
      { num: "8", letter: "eight" },
      { num: "9", letter: "nine" },
    ];
    const test = Array.from(s).map((a) => {
      if (isNaN(a)) {
        tempString += a;
        let letters;
        letters = lettertonum.find((data) => data.letter === tempString);
        if (letters) {
          answer += letters.num;
          tempString = "";
        }
      } else {
        answer += a;
      }
      return answer;
    });
   return parseInt(test[test.length - 1]);
  }

다 짜고보니 너무 복잡하게 짜버렸다는 걸 깨달음.
굳이 하나씩 map으로 돌리고 string으로붙여서 해당 영문이 되면 숫자로 바꾸는 것보다,
replaceall을 통해서 해당하는 영문을 한번에 다 숫자로 바꾸는 작업을 하는 게 훨씬 효율성이 좋을 것 같다.

profile
티끌모아 찐개발자되기

0개의 댓글