728x90
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function(s) {
const strInfo = preTrimStr(s);
strInfo[1] = postTrimStr(strInfo[1]);
let sign = strInfo[0];
let str = strInfo[1];
let integer = strToInteger(str);
integer = checkOverflowAndMakeClamp(integer, sign);
return integer * sign;
}
function checkOverflowAndMakeClamp(num, sign) {
if (sign === 1 && num > (2 ** 31) - 1) {
return (2 ** 31) - 1;
}
if (sign === -1 && num > (2 ** 31)) {
return (2 ** 31);
}
return num;
}
function strToInteger(str) {
let integer = 0;
for (let i = 0; i < str.length; i++) {
let digit = 10 ** i;
integer += str[str.length - 1 - i] * digit;
}
return integer;
}
function postTrimStr(s) {
const firstNonDigitIdx = s.search(/[^0-9]/g);
if (firstNonDigitIdx === -1) {
return s
} else {
return s.slice(0, firstNonDigitIdx);
}
}
function preTrimStr(s) {
const str = s.trim();
let sign = 1;
if (str[0] === '-') {
sign = -1;
return [sign, str.slice(1)];
}
if (str[0] === '+') {
return [sign, str.slice(1)];
}
return [sign, str];
}
- 숫자 앞에 부호가 아닌 다른 모든 문자가 와도 처리해주는 방식으로 먼저 제출했었다.
- 하지만 요구사항은 javascript의 parseInt()처럼 앞부분에 문자가 들어오면 바꿔주지 않는 로직이었다…. 요구사항 분석 한번에 하기 실패 ㅠ
- 아무튼…
- preTrimStr로 앞부분 처리 (trim()으로)
- postTrimStr로 뒷부분 처리 (정규식, String.search()로 non-digit찾아서 slice)
- strToInteger에서 첫자리부터 자릿수 곱해주며 인티져로 계산
- checkOverFlowAndMakeClamp로 오버플로우 되었으면 클램프(최대, 최솟값으로 고정)
- return !
배운 점, 느낀 점
- 1) 요구사항 분석 (문제 잘 읽기) 가 역시나 가장 중요하다. 컴퓨팅 사고, 코드 작성 능력 등을 위해 문제 풀이를 하는거지만, 결국 코테 준비도 이유 중 하나이기 때문에 시간 내에 정확하게 요구사항을 분석하고, 예외처리를 하는 등의 작업이 중요하다. 한번만에 요구사항을 제대로 분석하는 연습을 해야한다.
- 2) 같은 문제를 (안풀려서) 코드 싹 지우고 다시 풀었더니 훨씬 깔끔한 코드가 나왔다. 지금도 엄청 깔끔한건지는 잘 모르겠지만… 첨엔 정말 노답쓰… 였기 때문에.. ㅎㅎ 리팩토링, 코드 재설계 등을 많이 해보면서 코드 작성 능력을 키우면 좋겠다는 생각을 했다.
- 3) 확실히 내 실력에 비해 조금 까다로운 문제를 만나니 얻는게 많은것 같다. 빨리 이지 졸업하고 미디움 많이 풀어보자!!
'Coding Test > LeetCode' 카테고리의 다른 글
[Javascript] (LeetCode) 13. Roman to Integer (Easy) (0) | 2022.08.08 |
---|---|
[Javascript] (LeetCode) 206. Reverse Linked List (Easy) (0) | 2022.08.08 |
[Javascript] (LeetCode) 66. Plus One (Easy) (0) | 2022.08.04 |
[Javascript] (LeetCode) 28. Implement strStr() (Easy) (0) | 2022.08.03 |
[Javascript] (LeetCode) 125. Valid Palindrome (Easy) (0) | 2022.07.29 |
[Javascript] (LeetCode) 242. Valid Anagram (Easy) (0) | 2022.07.28 |
[Javascript] (LeetCode) 387. First Unique Character in a String (Easy) (0) | 2022.07.26 |
[Javascript] (LeetCode) 7. Reverse Integer (Medium) (0) | 2022.07.25 |
댓글