DAY4-String to Interger[Level: Medium]

김보람's avatar
Jan 07, 2026
DAY4-String to Interger[Level: Medium]

문제. String to Interger

문제를 요약해보면

  • 문자 → 숫자로 바꾼다

  • 앞 공백은 무시한다

  • 그 다음 “-”, “+”는 부호로 사용하고 아무것도 없을 시 양수로 처리한다

  • 숫자가 나오는 동안만 읽고 만약 숫자 이전에 글자가 나온다면 0을 리턴한다

  • 숫자가 아닌 글자를 만나면 숫자까지만 리턴한다

  • 32비트 정수 범위를 넘기면 자른다

  • 결과를 정수로 반환한다

위 조건을 충족하면 성공이다

내 풀이 코드.

var myAtoi = function(s) {

    const INT_MIN = - Math.pow(2,31)
    const INT_MAX = Math.pow(2,31) - 1

    let started = false
    let result = ""

    for(let i = 0; i < s.length; i++){
        if(!started && s[i] === " "){
            continue
        }

        if(!started && (s[i] === "-" || s[i] === "+")){
            started = true
            result += s[i]
            continue
        }

        if(s[i] >= "0" && s[i] <= "9" ){
            started = true
            result += s[i]
            continue
        }
        break
    }

    let num = Number(result)


    if (isNaN(num)) return 0
    if (num < INT_MIN) return INT_MIN
    if (num > INT_MAX) return INT_MAX

    return num
};

INT_MIN, INT_MAX의 경우 그냥 외우면 된다. 정수32비트의 범위는

−2,147,483,648 ~ 1 = 2,147,483,647 이고 이를 계산할때는

최소값 → —Math.pow(2,31)
최대값 → Math.pow(2,31) - 1

로 계산할수있고, 이범위를 넘어가면 최소 또는 최대값을 그대로 리턴하면 된다

started는 숫자가 들어갔는지를 확인하는 불리언값의 변수이다 숫자가 시작되었다면 뒤에 글자도, 부호도 올 수 없기 때문에 기억한다

started의 기준으로 공백을 무시하거나 부호를 넣어준다

그리고 기억해야할건 조건을 숫자로 명시할때는 0을 조심해야한다 if문은 정말 true인지 false인지를 구분하는것이 아닌 투루시한값과 펄시한 값을 판별하기때문에 s[i] >= "0" 이렇게 문자로 비교했다

리팩토링이 필요한 부분.

let num = Number(result)

지금은 Number를 써서 값을 숫자화 했지만 하나씩 숫자로 넣을 수 있으면 좋겠다.

Share article

김보람 | 930802qhfka@gmail.com