본문 바로가기
알고리즘/leetcode&프로그래머스

[LEETCODE] string to integer(atoi)- javascript (풀이 있음)

by 윤-찬미 2021. 5. 9.

👀 문제 - 8. String to Integer (atoi) / 난이도 - Medium

leetcode.com/problems/string-to-integer-atoi/

 

String to Integer (atoi) - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

* 문제의 예제 길이가 좀 길어 링크만 첨부 합니다.


👀 풀이

문제만 잘 읽고 단순 구현만 해내면 되기에 미디엄의 수준은 아니였던 것 같다.

근데 내가 난독증인지 문제의 제약조건이 좀 더 상세히 명시되어 있으면 좋았을 거 같다는 생각을 했다.

 

문제는 문자열  s를 "조건에 맞게" 숫자로 바꿔 주는 문제 였다.

여기서 조건이라 함은

1) 선행 공백은 무시한다.

2) 부호를 확인한다.

3) 정수 범위[-231, 231 - 1]  를 벗어나면 안된다.

4) 문자열이 숫자보다 선행에 있을 경우 0을 리턴한다.

5) 숫자가 아닌 문자열은 무시된다.

 

따라서 요구조건에 맞게 코드만 작성해 주면 되는 간단한 문제였다.

변수들을 정의 했다.

let sign = "+"; // 부호
const numberArr = []; // 숫자들을 담을 배열
const max = Math.pow(2, 31) - 1; // max 값
const min = Math.pow(-2, 31); // min 값
let n = 0; // 최종적으로 리턴해줄값

선행 공백을 모두 제거한 후 배열로 변환했다.

 const noneSpace = s.trimStart().split('');

맨앞에 부호가 있으면 부호를 저장해두고 맨앞을 삭제해준다.

if(noneSpace[0] === '+' || noneSpace[0] === '-') {
  sign = noneSpace[0];
  noneSpace.shift();
}

그 후 배열을 돌면서 숫자값을 기록해 두다가 문자열이나, 공백을 만나면 반복문을 나간다.

for (let str of noneSpace) {
  if (isNaN(Number(str)) || str === " ") {
    break;
  } else {
    numberArr.push(str);
}
}

아무런 값도 담기지 않았음은 문자열안에 숫자가 없었다는 의미므로 0을 리턴한다.

if (numberArr.length === 0) {
   return n;
}

부호를 반영해준다.

if (sign === "+") {
  n = Number(numberArr.join(''));
  if (n >= max) {
    n = max;
  }
}
if (sign === "-") {
  n = Number(numberArr.join('')) * -1;
  if (n <= min) {
  	n = min;
  }
}

 


👀최종 코드

/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {
    let sign = "+";
    const numberArr = [];
    const max = Math.pow(2, 31) - 1;
    const min = Math.pow(-2, 31); 
    let n = 0;
    const noneSpace = s.trimStart().split('');
    if(noneSpace[0] === '+' || noneSpace[0] === '-') {
        sign = noneSpace[0];
        noneSpace.shift();
    }
    for (let str of noneSpace) {
        if (isNaN(Number(str)) || str === " ") {
            break;
        } else {
            numberArr.push(str);
        }
    }
    if (numberArr.length === 0) {
        return n;
    }
    if (sign === "+") {
        n = Number(numberArr.join(''));
        if (n >= max) {
            n = max;
        }
    }
    if (sign === "-") {
        n = Number(numberArr.join('')) * -1;
        if (n <= min) {
            n = min;
        }
    }
    return n;
    
};