오늘의 스터디 문제 목록
<<숫자 문자열과 영단어>>
function solution(s) {
let str = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
let num = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
// 입력받은 문자열이 전부 숫자면 Number()로 리턴해 주고
// 입력받은 문자열이 전부가 숫자가 아닌 경우
// s에 replace를 해 준다
if(isNaN(s)){ // 원래 if로 했었는데 제한 시간 때문에 while로 바꾸니 성공했다.
for(let i = 0 ; i < str.length ; i++){ // str의 요소를 순회
s = s.replaceAll(str[i], num[i]); // s 문자열의 str의 i번째 요소를 num의 i번째 요소로 바꾼다.
} //if로 하면 replace는 하나만 바꾸니까 ㅇㅋㅇㅋ
}
return Number(s);
}
if(isNaN(s)){ // 원래 if로 했었는데 제한 시간 때문에 while로 바꾸니 성공했다.
for(let i = 0 ; i < str.length ; i++){ // str의 요소를 순회
❌ s = s.replace(str[i], num[i]); // s 문자열의 str의 i번째 요소를 num의 i번째 요소로 바꾼다.
} //if로 하면 replace는 하나만 바꾸니까 ㅇㅋㅇㅋ
}
if를 쓰고 replace를 썼더니 테스트는 통과하고 채점하니까 오답이라고 나와서 제한시간 때문인가 싶어서 if 대신 while을 썼더니 통과했었다. 그래서 제한시간의 문제로 알고 있었는데 스터디를 진행하면서 스터디원분들의 도움을 받아서 원인을 찾았다! 위 코드로 실행을 하게 될 경우 if안의 replace를 한 번만 수행하기 때문이었다...! 생각보다 심플한 원인이었던 것...
위의 코드에서 while로 바꾸게 된다면 replace를 하나씩 다 돌게 되니까 가능했던 거고
if를 그대로 쓰려면 replace가 아닌 replaceAll을 쓰면 된다! 반성반성 덕분에 하나 더 알게 됐다!