[프로그래머스] 영어가 싫어요.JS

ungnam·2023년 6월 1일

programmers level0

목록 보기
11/29
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/120894

나의 풀이

function solution(numbers) {
    let result = [];
    const numArr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    
    while (numbers.length) {
        numArr.forEach((v) => {
            if (numbers.startsWith(v)) {
                result.push(numArr.indexOf(v));
            }
        });
        numbers = numbers.substr(numArr[result.at(-1)].length);
    }
    return +result.join("");
}

numberslength가 0이 될때까지 numArr의 요소와 numbers의 처음 부분을 비교
✔ 일치 시 numArr의 대응되는 인덱스를 push (영어를 정수로 바꾼 것과 같음)
✔ 삽입 후 numbers의 처음 부분을 버리고 다시 반복문 실행

참고할 만한 풀이

function solution(numbers) {
    const numArr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    const result = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
      return numArr.indexOf(v);
    });
    return +result;
}

replace의 두 번째 인자에 콜백을 넣을 수 있고, 바꾸는 값을 콜백의 인수로 받을 수 있다.


function solution(numbers) {
    const numArr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    for(let i = 0; i < numArr.length; i++){
        numbers = numbers.split(numArr[i]).join(i);
    }
    return +numbers;
}

numArr 요소 전체를 돌면서 그 요소를 구분자로 하는 split 메서드를 사용하는 방식
numbers의 끝부분에 i 삽입 (영어를 정수로 바꾼 것과 같음)


function solution(numbers) {
    const numArr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    
  	return +numArr.reduce((a, c, i) => a.replaceAll(c, i), numbers);
}

✔ 위 방식과 유사하나 reduce 메소드를 활용하였다.

profile
꾸준함을 잃지 말자.

0개의 댓글