![DAY4-String to Interger[Level: Medium]](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3DLeetCode%2BDAY4%26tag%3DTemplate%2B1%26description%3DString%2Bto%2BInterger%255BLevel%253A%2BMedium%255D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%2523ffffff%26bgEndColor%3D%2523ffffff%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3Dhttps%253A%252F%252Fsource.inblog.dev%252Flogo%252F2025-12-24T06%253A07%253A46.034Z-ddf15b75-3608-41bd-8914-cd5d2d9efc83%26blogTitle%3D&w=3840&q=75)
문제. 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