2022/01/06) 3. 숫자만 추출 [문자열 탐색]

굥굥이·2022년 1월 6일
0
post-thumbnail

1. 문제

<숫자만 추출>
: 문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만든다. 만약 "tag0a1h205er"에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205가 된다.

2. 해결 방법

  1. 첫 번째 방법 : 앞에서 배웠던 정규표현식으로 해결해도 되고, 아스키코드로 해결해도 된다.
  2. 두 번째 방법 : isNaN(Not a Number)메서드를 써서 해결해도 된다. 만약 숫자면 false가 나올 것이고, 숫자가 아니라면 true가 나올 것이다.
    추가로 Number(x)를 하면 타입을 숫자타입으로 만들어 주는 거 같다.

3. 정답

        <script>
            function solution(str){
                let answer="";
                for(let x of str){
                    if(!isNaN(x)) answer+=x;
                }  
                return parseInt(answer);
            }       
            let str="g0en2T0s8eSoft";
            console.log(solution(str));
        </script>
        <script>   //만약 parseInt()를 쓰지 말라고 할 경우.
            function solution(str){ 
                let answer =0;
                for(let x of str){
                    if(! isNaN(x)) answer = answer * 10 + Number(x)
                }
                return answer;
            }
            let str="g0en2T0s8eSoft";
            console.log(solution(str));
        </script>
        <script>   //아스키코드로 한 건데 왜 안되지... 틀린 거 없는 거 같은데 ㅜㅜ엉엉
            function solution(str){
                //for..of 로 해서, 하나로 바꾼 후 아스키코드 이용해서 추출해도 되겠다
                let answer;
                let s = str.toUpperCase(); //1. 대문자로 변경 
                for(let x of s){
                    let num = x.charCodeAt(); //2. 유니코드로 변경. 대문자로 변경했으므로 65~90에 포함되지 않는 것들 추출
                    if( !(num >= 65 && num <= 90) ) answer += x;
                }
                return parseInt(answer);
            }
            let str="g0en2T0s8eSoft";
            console.log(solution(str));
        </script>

4. 내 코드와 비교 그리고 반성

이 멍충이 새키야!!! 정규표현식을 왜 또 //가 아닌 \\로 하고 거기다가 ''는 또 왜 붙이냐고!!! .replace('[^]\','') ㅋㅋ 진짜 환장하겠다. 그래도 잘한점은 여러 방법으로 시도했다는 점..? 하지만 아직 모르는 게 많다. replace로 문자를 ''로 만드는 거 말고, 그냥 정규표현식으로 숫자만 추출해서 값을 만드는 건 없나..?

profile
아자아자 파이띵굥!

0개의 댓글