👀 문제 - 8. String to Integer (atoi) / 난이도 - Medium
leetcode.com/problems/string-to-integer-atoi/
* 문제의 예제 길이가 좀 길어 링크만 첨부 합니다.
👀 풀이
문제만 잘 읽고 단순 구현만 해내면 되기에 미디엄의 수준은 아니였던 것 같다.
근데 내가 난독증인지 문제의 제약조건이 좀 더 상세히 명시되어 있으면 좋았을 거 같다는 생각을 했다.
문제는 문자열 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;
};
'알고리즘 > leetcode&프로그래머스' 카테고리의 다른 글
[LEETCODE] 6. ZigZag Conversion - javascript (풀이 있음) (0) | 2021.05.09 |
---|---|
[프로그래머스] 셔틀버스 - javascript (0) | 2021.05.07 |
[프로그래머스] 가장 먼 노드 - javascript(풀이 있음) (0) | 2021.05.07 |
[프로그래머스] 징검다리 건너기 - js (풀이 있음) (2) | 2021.04.22 |
[프로그래머스] 튜플 - javascript (0) | 2021.04.16 |