function solution(s) {
let arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for (let i=0; i<10; i++){
while (s.includes(arr[i])){
s = s.replace(arr[i],i);
}
}
return +s;
}
// alternative
function solution(s) {
s = s.replace(/zero/gi, 0)
.replace(/one/gi, 1)
.replace(/two/gi, 2)
.replace(/three/gi, 3)
.replace(/four/gi, 4)
.replace(/five/gi, 5)
.replace(/six/gi, 6)
.replace(/seven/gi, 7)
.replace(/eight/gi, 8)
.replace(/nine/gi, 9)
return parseInt(s);
}
feedback: replace를 활용하는 문제. JS에서 특정 문자열을 찾아서 치환해주는 방법이 있다. syntax: string.replace(searchvalue, newvalue). 문자열에서 searchvalue를 찾아서 newvalue로 바꿔준다. 단, replace()는 첫 번째로 찾은 문자열만 치환해준다. 또한 replace()는 대소문자를 구분하여 치환해준다. 대소문자의 구분없이 문자열을 치환해주기 위해서는 정규식을 사용하여 searchvalue를 '/'로 감싸고 '/'뒤에는 대소문자를 구분하지 말라는 'i'를 붙여준다(i.e. /searchvalue/i). i stands for ignore case. 앞서, replace()는 처음으로 detect되는 searchvalue만 바꿔주기 때문에 만약 해당되는 모든 searchvalue를 바꿔주고 싶다면, '/'뒤에 g(stands for global match)를 붙이면 된다. 즉, /searchvalue/gi 로 쓰게 된다면 이는 '문자열에서 searchvalue에 해당하는 것들은 대소문자 구분 없이 다 newvalue로 replace 하세요' 라는 뜻이 된다. 정규식을 이용하여 푼 풀이도 있었서 가지고 왔는데 시간복잡도나 공간복잡도로 봤을 때 그리 효율적인 코드는 아닌 듯 하다.
let s = "print hello world"
for (let i=0; i<s.length; i++){
s[i] = s[i].toUpperCase()
}
// 이건 가능
s += t[i][j].toUpperCase();
어떤 분이 질문을 주셨는데 한번도 생각해본 적 없었던 내용이라 한번 가지고 와봤다. or문을 이용해서 s에 있는 lowercase 'p'를 uppercase 'P'로 바꾸고 싶다고 하셨는데 string일 때는 저게 바뀌지 않는다. 나 역시 처음에는 바뀌어야 된다고 생각했는데 찾아보니 [strings are immutable, which means the best you can do is to create a new string with the changed content and assign the variable to point to it.] 이렇게 stackoverflow에 올라와있다. string 자체가 하나의 묶음으로 치다 보니 그런 것 같다. 오늘도 질문을 받음으로써 하나를 더 알아간다.