본문 바로가기

Development/TIL

문자열과 영단어

문제

프로그래머스 숫자 문자열과 영단어 문제를 푸는 중

난관에 봉착하였다. 주어진 문자열에 포함된 숫자에 대응되는 영단어를

숫자로 치환해 반환하면 되는 문제였다.

문제링크

 

 

 

시도

function solution(s) {
    let word = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    
    for (let i = 0; i < word.length; i++) {
            s.split(word[i]).join(i)
    }
    return s
}

각 숫자에 대응되는 단어로 이루어진 배열을 할당하여 for문으로 반복하며 word의 i번째 요소로 split이 되면

다시 i로 붙여주는 방식이었지만 전혀 치환이 되지 않았다.

 

두번째 시도

function solution(s) {
    let answer = [s];
    let word = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    
    for (let i = 0; i < word.length; i++) {
            answer.split(word[i]).join(i)
    };
    return answer
}

answer를 선언하여 문자열 s를 배열로 선언하여 split과 join을 사용해보았지만 마찬가지였다.

 

 

 

 

해결

function solution(s) {
    let answer = s;
    let word = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    
    for (let i = 0; i < word.length; i++) {
        answer = answer.split(word[i]).join(i);
    };
    return Number(answer);
}

 

 

 

 

알게된 것

제대로 작동하지 않았던 코드들은 할당한 값에 메서드를 직접 사용했기 때문에 제대로 작동하지 않았던 것이다.

다시 말하자면 for문 안에서 업데이트되고 전역에서는 반영이 되지 않는다는 것이다.

그렇기 때문에 다음번 반복 때 업데이트 된 내용이 적용되지 않고 계속 초기화가 된 것이다.

 

주어진 문자열 s를 answer로 할당하여 for문 내부에서 활용하고 업데이트 된 값을 재할당 해준다.

이런식으로 계속 업데이트가 반복되면 결국 원하는 값이 나오게 되는 것이다.

 

변수를 활용할 땐 항상 스코프를 고려해야하고 메모리적 관점에서 생각해 볼 것!!!

'Development > TIL' 카테고리의 다른 글

TIL(feat.프로그래머스 1차 비밀지도)  (0) 2023.04.13
소수 구하기 (feat.에라토스테네스의 체)  (0) 2023.04.12
N진법 변환  (0) 2023.04.10
match 메소드  (0) 2023.04.08
다중 배열  (0) 2023.04.07