leetcode.com/problems/string-to-integer-atoi/
핵심아이디어
문제의 조건을 구현하기만 하면된다.
1. 앞 공백은 무시한다.
=> trim(' ')을 사용
2. -, +는 음,양수를 뜻한다. 아무 sign이 없으면 양수이다.
3. 숫자가 아닌 문자가 나오면 그 뒤의 문자열은 무시한다. (첫번째가 -,+인 경우는 당연히 제외겠지?), (처음부터 -,+아닌 문자면 0출력)
=> 문자열을 1자리씩 순회하되, 숫자가 아닌 문자로 판단되면 그 이전까지의 index를 저장하고 종료한다. (some사용. forEach는 break가 안되기 때문.)
이때 처음에 -,+가 있는 것은 허용하여 구현한다.
4. 문자열을 출력하되 앞이 0으로 시작하면 0을 제거한다.
=>trim('0')를 사용
5. 숫자의 범위는 [-2^31, 2^31-1]이고 이 범위를 벗어나는 경우 경계값으로 출력한다.
ex) -9978654365215376217는 -2^31으로, 937893648923647836는 2^31-1으로 출력
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function (s) {
let isNegative = false;
let digitRange = 0;
s = s.trim(' ');
if (Array.from(s)[0] === '-') isNegative = true;
Array.from(s).some((v, i) => {
if(v === '-' || v === '+'){
if(i!==0){
return true;
}
}
if ('0' <= v || v <= '9') {
digitRange = i;
} else {
return true;
}
return false;
});
s = s.slice(0, digitRange + 1).trim('0');
s = parseInt(s, 10);
s = Math.max(-1 * 2 ** 31, s);
s = Math.min(2 ** 31 - 1, s);
return s ? s : 0;
};
'개발 > 알고리즘' 카테고리의 다른 글
[LeetCode] 122. Best Time to Buy and Sell Stock II (0) | 2021.01.26 |
---|---|
[LeetCode] 5. Longest Palindromic Substring (팰린드롬) (0) | 2021.01.23 |
[Javascript][LeetCode] Reverse Integer (0) | 2021.01.17 |
[Javascript][BOJ] 1302 베스트 셀러 (0) | 2021.01.14 |
[Javascript][BOJ] 1967 트리의 지름 (0) | 2021.01.11 |