본문 바로가기

Algorithm

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


숫자 문자열과 영단어

2021 카카오 채용연계형 인턴십

문제보기

 

제출 답안

function solution(s) {
    let answer = '';
    const k = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    let tmp = '';
    for (let i = 0; i < s.length; i++) {
        if (isNaN(s[i])) {
            tmp += s[i];
            if (k.includes(tmp)) {
                answer += k.indexOf(tmp);
                tmp = '';
            }
        } else {
            answer += s[i];
        }
    }
    return answer * 1;
}

 

풀이

  1. 매개변수 s를 전체 탐색하기 위해 s의 길이만큼 for 반복문 실행
  2. i를 활용하여 s의 첫 글자부터 끝까지 확인(s[i])
  3. s[i]가 Number 유형이 아니라면(소문자 알파벳이라면) 임시저장 공간 tmp에 s[i]를 더해준다.
  4. tmp에 영단어가 배열 k 원소 중 존재하는 특정 단어가 완성되면 해당 영단어와 대응되는 숫자 값을 answer에 더해주고, tmp는 비워준다.
  5. s[i]가 Number 유형이라면 answer에 그대로 s[i]를 더해준다.
  6. answer에 모인 값의 유형은 String이기 때문에 1을 곱해주어 Number로 바꾸고 solution 함수를 반환해준다.

 

학습내용

배열의 인덱스 활용하기

  • 배열 k는 영단어와 0부터 9까지 숫자 값을 대응시켜주는 용도로 사용했다.
  • k의 원소 값과 해당 원소의 인덱스 값이 서로 일치하기 때문에 indexOf() 메서드를 활용했다.(ex. k.indexOf('three') === 3)

Number 유형 판별하기 - isNaN() 함수 사용

  • isNaN(value)은 매개변수(value)가 NaN이면 true를 반환, 아니면 false를 반환하는 함수다.
  • 해당 문제에서는 s[i]가 알파벳인지 숫자인지 확인을 하는 데 사용한다.(숫자면 NaN이 아니기 때문에 true를 반환)
  • ECMA2015에서 추가된 Number.isNaN() 메서드가 더 강력하다고 한다.