티스토리 뷰

programmers. Level1

javascript - 숫자 문자열과 영단어

코딩하는 둥아 2021. 10. 25. 16:20
728x90

[input -> output]

s라는 문자열이 input으로 들어올 때, 변환되지 않은 문자열을 숫자의 형태로 바꾸어 number 형태로 반환하는 문제이다.

나의 경우 어떻게 문자열을 숫자로 변환할 수 있을까 생각하던 중 replace 함수가 떠올랐다.

하지만 replace 함수는 처음에 발견하는 string에 대해서만 변환을 해주기 때문에, s에 속한 모든 문자열을 변환하려면 정규식을 사용해야했다.

 

text.replace(/c/g, "변환하려는 문자");

위와 같이 사용하면 문자열에 속한 "c"라는 문자를 모두 변환할 수 있다.

하지만 이 문제의 경우 변수에 담긴 문자열을 찾고 싶은 것이기 때문에 다른 방식이 필요했다.

변수를 활용하여 문자열 대체가 필요할 때에는 아래의 코드와 같이 RegExp 를 통해 정규식을 만들어주면 된다.

대소문자 구분없이 변환하고 싶으면 gi를 넣어주면 된다!

var re = new RegExp(findStr[i], "g"); // 대소문자 구분됨
s = s.replace(re, i.toString())

var re = new RegExp(findStr[i], "gi"); // 대소문자 상관없이 모두 변환
s = s.replace(re, i.toString())

 

이 문제를 풀기 위해 내가 짠 코드이다.

function solution(s) {
    var findStr = ["zero","one","two","three","four","five","six","seven","eight", "nine"];
    for(var i=0 ; i<findStr.length ; i++) {
        var re = new RegExp(findStr[i], "g");
        s = s.replace(re, i.toString())
    }
    return s*1;
}

 

문제를 제출하고 난 후 굉장히 효율적인 코드를 발견했다.

정규식은 사용법에 익숙해지기 쉽지 않은데, splitjoin함수를 사용하여 간단하게 풀 수 있었다.

앞으로 문제를 풀 때 이러한 방법을 응용하려고 노력해야겠다!

function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    var answer = s;

    for(let i=0; i< numbers.length; i++) {
        let arr = answer.split(numbers[i]);
        answer = arr.join(i);
    }

    return Number(answer);
}

 

728x90

'programmers. Level1' 카테고리의 다른 글

javascript - 3진법 뒤집기  (0) 2021.11.03
javascript - 폰켓몬  (0) 2021.11.03
javascript - 모의고사  (0) 2021.11.01
javascript - 소수 만들기  (0) 2021.10.28
javascript - 예산  (0) 2021.10.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함