Algorithm(중)

Jeong Yeongmin·2022년 9월 28일
0

Algorithm

목록 보기
7/9

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 자체가 하나의 묶음으로 치다 보니 그런 것 같다. 오늘도 질문을 받음으로써 하나를 더 알아간다.

0개의 댓글

관련 채용 정보