문제
프로그래머스 숫자 문자열과 영단어 문제를 푸는 중
난관에 봉착하였다. 주어진 문자열에 포함된 숫자에 대응되는 영단어를
숫자로 치환해 반환하면 되는 문제였다.
시도
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 |