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

잭슨·2024년 6월 6일
0

알고리즘 문제 풀이

목록 보기
113/130
post-thumbnail

문제

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

풀이

문제 정의

다음과 같이 숫자를 나타내는 영단어와 숫자가 섞여있는 문자열이 주어졌을 때, 영단어를 숫자로 바꾸는 문제다.
예시) "one4seveneight" -> 1478

해결방안

const word = ["zero","one","two","three","four","five","six","seven","eight","nine"];

영단어는 zero(0)부터 nine(9)까지 있으므로 배열을 이용해 인덱스와 영단어를 매칭시켜서 저장한다.

let answer = '';
const isDigit = (n) => /\d/.test(n);

while(s.length > 0){
    // 모든 영단어를 순회하며 s가 영단어로 시작하는지 확인
    for(let i=0; i<=9; i++){
      // 만약 영단어로 시작한다면 그때의 인덱스(숫자)를 정답에 저장하고, 영단어 지우기
      if(s.startsWith(word[i])) {
          answer += i;
          s = s.replace(word[i],'');
      }
   // 숫자와 영단어가 교체되지 않았다면 숫자이므로 숫자를 정답에 저장 
   if(isDigit(s[0])){
     answer += s[0];
     s = s.replace(s[0], '');
   }
}

그리고 문자열을 순회하며 문자열이 word에 있는 단어로 시작할 경우 그때의 번호(인덱스)를 answer에 저장하고 해당 단어를 문자열에서 제거해준다. replace함수는 첫 번째 인자로 전달된 문자열과 일치하는 첫 번째 문자열을 두 번째 인자의 값을 치환한다.

그리고 s[0]이 숫자라면 정답에 해당 숫자를 저장하고 문자열에서 제거해준다.

문자열의 길이가 0이 될때까지 이 과정을 반복한다.

// 결과는 정수형이여야 하므로 문자열을 정수로 변환
return +answer;

결과는 문자열이 아니라 정수형으로 출력되어야 하므로 문자열을 숫자로 변환해준다. (+를 이용한 암묵적 변환)

profile
지속적인 성장

0개의 댓글