From 36250b3538395e236104f69b6af2c74bc094ea90 Mon Sep 17 00:00:00 2001 From: seungseung88 Date: Tue, 15 Apr 2025 20:54:02 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=ED=92=80=EC=9D=B41:=20Valid=20Palindrome?= =?UTF-8?q?=20#220?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-palindrome/seungseung88.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 valid-palindrome/seungseung88.js diff --git a/valid-palindrome/seungseung88.js b/valid-palindrome/seungseung88.js new file mode 100644 index 000000000..5de488fc4 --- /dev/null +++ b/valid-palindrome/seungseung88.js @@ -0,0 +1,25 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + // 숫자와 문자만 추출하는 정규식 + const REGEX = /[0-9a-zA-Z]/g; + + const wordArr = s.match(REGEX); + + // 문자가 비어있으면 true반환 + if (!wordArr) return true; + + let l = 0; + let r = wordArr.length - 1; + + while (l < r) { + if (wordArr[l].toLocaleLowerCase() !== wordArr[r].toLocaleLowerCase()) return false; + console.log(l, r); + l += 1; + r -= 1; + } + + return true; +}; From 56f96eb6b9661d727d8b089cda1d95213dae53d7 Mon Sep 17 00:00:00 2001 From: seungseung88 Date: Wed, 16 Apr 2025 22:31:07 +0900 Subject: [PATCH 2/3] Number of 1 Bits #232 --- number-of-1-bits/seungseung88.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 number-of-1-bits/seungseung88.js diff --git a/number-of-1-bits/seungseung88.js b/number-of-1-bits/seungseung88.js new file mode 100644 index 000000000..fe52a4243 --- /dev/null +++ b/number-of-1-bits/seungseung88.js @@ -0,0 +1,28 @@ +/** + * 시간 복잡도: O(log n) + * 공간 복잡도: O(n) + */ +// +var hammingWeight = function (n) { + let count = 0; + + while (n > 0) { + if (n % 2) count += 1; + + // Math.floor랑 같은 역할 + n = ~~(n / 2); + } + + return count; +}; + +// 비트 연산자 사용 +var hammingWeight = function (n) { + let count = 0; + while (num > 0) { + if (n & 1) count += 1; + n >>>= 1; + } + + return countOne; +}; From 3fc20a056e246108276b7a7615521a18ba266c4e Mon Sep 17 00:00:00 2001 From: seungseung88 Date: Wed, 16 Apr 2025 23:11:00 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=ED=92=80=EC=9D=B42:=20=EA=B3=B5=EA=B0=84?= =?UTF-8?q?=20=EB=B3=B5=EC=9E=A1=EB=8F=84O(n)=20->=20O(1)=20=20Valid=20Pal?= =?UTF-8?q?indrome=20#220?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-palindrome/seungseung88.js | 56 ++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/valid-palindrome/seungseung88.js b/valid-palindrome/seungseung88.js index 5de488fc4..20a759eea 100644 --- a/valid-palindrome/seungseung88.js +++ b/valid-palindrome/seungseung88.js @@ -1,25 +1,61 @@ /** - * @param {string} s - * @return {boolean} + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) */ -var isPalindrome = function (s) { - // 숫자와 문자만 추출하는 정규식 - const REGEX = /[0-9a-zA-Z]/g; +// var isPalindrome = function (s) { +// // 숫자와 문자만 추출하는 정규식 +// const REGEX = /[0-9a-zA-Z]/g; + +// const wordArr = s.match(REGEX); + +// // 문자가 비어있으면 true반환 +// if (!wordArr) return true; + +// let l = 0; +// let r = wordArr.length - 1; + +// while (l < r) { +// if (wordArr[l].toLocaleLowerCase() !== wordArr[r].toLocaleLowerCase()) return false; +// console.log(l, r); +// l += 1; +// r -= 1; +// } - const wordArr = s.match(REGEX); +// return true; +// }; - // 문자가 비어있으면 true반환 - if (!wordArr) return true; +/** + * 시간 복잡도: O(n) + * 공간 복잡도: 1 + */ +var isPalindrome = function (s) { + // 숫자와 문자만 추출하는 정규식 + const isAlnum = (char) => + (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'); let l = 0; - let r = wordArr.length - 1; + let r = s.length - 1; while (l < r) { - if (wordArr[l].toLocaleLowerCase() !== wordArr[r].toLocaleLowerCase()) return false; console.log(l, r); + if (!isalnum.test(s[l])) { + l += 1; + continue; + } + if (!isalnum.test(s[r])) { + r -= 1; + continue; + } + if (s[l].toLowerCase() !== s[r].toLowerCase()) { + return false; + } l += 1; r -= 1; } return true; }; + +const s = 'A man, a plan, a canal: Panama'; + +console.log(isPalindrome(s));