Algorithm - level1 숫자문자열과 영단어

ryan·2022년 5월 15일
0

숫자 문자와 숫자가 섞여있는 단어를 숫자로 변환
"one4seveneight" > 1478
"23four5six7" > 234567
"2three45sixseven" > 234567
"123" > 123

내 풀이(100/100)

function solution(s) {
    const answer = [];
    let word = [];
    let reg = /[0-9]/;
    let splitS = s.split('');
    function join(e) {
      switch (e.join('')) {
        case 'zero':
          answer.push(0);
          word = [];
          break;
        case 'one':
          answer.push(1);
          word = [];
          break;
        case 'two':
          answer.push(2);
          word = [];
          break;
        case 'three':
          answer.push(3);
          word = [];
          return;
        case 'four':
          answer.push(4);
          word = [];
          break;
        case 'five':
          answer.push(5);
          word = [];
          break;
        case 'six':
          answer.push(6);
          word = [];
          break;
        case 'seven':
          answer.push(7);
          word = [];
          break;
        case 'eight':
          answer.push(8);
          word = [];
          break;
        case 'nine':
          answer.push(9);
          word = [];
          break;
        default:
          break;
      }
    }
    splitS.forEach((e) => {
      if (reg.test(e)) {
        answer.push(e);
      } else {
        word.push(e);
        join(word);
      }
    });
    return Number(answer.join(''));
  }
  • 입력을 받은 다음 입력받은 문자열에 foreach문을 사용했다.
  • 각 요소를 정규표현식을 통해 0-9사이의 문자인 경우, answer 배열에 넣었다.
  • 아닌 경우, word 각 문자를 넣고, switch문을 통해 word 배열을 합친 단어의 case를 확인한 후 일치하면 숫자로 변환하여 answer에 추가하고 word 배열을 초기화했다.

다른 사람 풀이 뜯어보기

function solution(s) {
  const stringToNum = [
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine",
  ];
  for (let i = 0; i < 10; i++) {
    s = s.split(stringToNum[i]).join(i);
  }
  return parseInt(s);
}
  • 구조는 stringToNum으로 선언한 숫자문자열을 기준으로 split하고 join을 통해 split된 배열을 해당 숫자 기준으로 다시 합치는 알고리즘이다.
  • 내 풀이는 코드가 60줄인데 이건 18줄이다. 데이터 설계와 참조의 중요성을 매번 느낀다.
profile
프론트엔드 개발자

0개의 댓글