잿꽃's posting Garden

프로그래머스에서 코딩테스트 연습1 - 숫자 문자열과 영단어 본문

WEB/코딩테스트 연습

프로그래머스에서 코딩테스트 연습1 - 숫자 문자열과 영단어

잿꽃 2022. 5. 12. 18:08

숫자와 영문자가 섞인 문자를 숫자로 변환하기

 

ex) one4seveneight -> 1478

문자와 숫자가 섞인 문자열이 입력되면 숫자열로 변환되어서 나타나야 한다.

 

테스트를 통과했는데 채점하니까 5, 7, 8에서 문제가 생겼다.

왜 안 되는거지 한참 헤맸다. 알고 보니 replace는 하나만 바꿔줘서 twotwo 이런 식으로 있으면 22가 아닌 2two로 되기 때문이었다.

replaceAll이 사용이 전혀 안되었는데 정확한 원인은 알 수 없지만 node version이 v10.16.0은 replaceAll을 사용할 수 없다는데 이 사이트가 그런 건가 싶었다.

 

그래서 while문에서 s의 내용이 문자가 아닐 때까지 반복실행하는 것으로 수정했다.

function solution(s) {
    const num = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    
    while(isNaN(s)){
        for(i =0; i < num.length; i++){
            s = s.replace(num[i],i);
        }
    }
    return Number(s);
}

 

아무래도 동일 숫자가 있을 때 while문이 여러번 반복되어야 하다 보니 7, 8번 시간이 늘어난 거 같다.

 

 

결론

1. replaceAll로 동일한 부분 모두 바꾸기

2. while문으로 s가 숫자가 될 때까지(isNaN활용) 반복하여 replace로 바꾸기

728x90
Comments