스터디 기록6

유아현·2022년 11월 18일
0

Study

목록 보기
7/27
post-thumbnail

오늘의 스터디 문제 목록

replace()와 replaceAll() 차이점!

  • replace(): 첫 번째 문자만 치환되고 작동 중지
  • replaceAll(): 특정 문자를 모두 치환하고 작동 중지

<<숫자 문자열과 영단어>>

  • 통과한 코드
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을 쓰면 된다! 반성반성 덕분에 하나 더 알게 됐다!

0개의 댓글