[프로그래머스] 숫자 문자열과 영단어

yes3427·어제
0

문제풀이

목록 보기
1/9
post-thumbnail

오늘은 프로그래머스의 숫자 문자열과 영단어 를 풀어보자.
2021 카카오 채용연계형 인턴십 코딩테스트 문제였다.
난이도가 낮은 문제이다.

문제

숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

문제 분석

객체로 접근하려고 했지만 숫자와 영단어 모두에 접근하기 위해서는 숫자와 영단어를 key로 갖는 모든 값을 입력해야해서 코드가 길어진다.
따라서 숫자를 배열의 인덱스라고 생각하여 접근하기로 했다.

    const NUMBER = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

입력값을 순회하면서 확인한다.
만약 숫자이면 answer에 추가하고
숫자가 아니면

  1. temp에 하나씩 추가하면서 NUMBER에 포함된 값이 나오면 숫자로 바꿔서 answer에 추가해준다.
  1. temp를 초기화시켜준다.
function solution(s) {
    const NUMBER = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    let answer = '';
    let temp = '';

    for (let i = 0; i < s.length; i++) {
        const value = s[i];

        if (!isNaN(value)) {
            answer += value;
            temp = '';
        } else {
            temp += value;
            if (NUMBER.includes(temp)) {
                const index = NUMBER.indexOf(temp);
                answer += index;
                temp = '';
            }
        }
    }
    return Number(answer);
}
profile
소비자가 아닌 생산자가 되자

0개의 댓글