From 6e87588c015a43eb63ce4d7c6e2a0df38ce200e6 Mon Sep 17 00:00:00 2001 From: jangwonyoon Date: Fri, 12 Sep 2025 14:39:09 +0900 Subject: [PATCH 1/2] solved1. countSubstrings --- palindromic-substrings/jangwonyoon.js | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 palindromic-substrings/jangwonyoon.js diff --git a/palindromic-substrings/jangwonyoon.js b/palindromic-substrings/jangwonyoon.js new file mode 100644 index 000000000..f04c067ad --- /dev/null +++ b/palindromic-substrings/jangwonyoon.js @@ -0,0 +1,48 @@ +/** + * @param {string} s + * @return {number} + * + * 풀이 방법 + * + * 1. brute force 를 사용해서 모든 경우의 수를 구한다. + * 2. 투포인터를 통해 isPalindrome 을 확인한다. + * + * 복잡성 + * + * Time Complexity: O(n^2) + * Space Complexity: O(1) + */ + +/** + * isPalindrome 함수 + */ +function isPalindrome(s) { + let left = 0; + let right = s.length - 1; + + while (left < right) { + if (s[left] !== s[right]) return false; + left++; + right--; + } + + return true; +} + +var countSubstrings = function(s) { + let count = 0; + + // 모든 경우의 수를 구한다. + for (let start = 0; start < s.length; start++) { + for (let end = start; end < s.length; end++) { + const subStr = s.slice(start, end + 1); + + // isPalindrome 함수를 통해 팰린드롬인지 확인한다. + if (isPalindrome(subStr)) { + count++; + } + } + } + + return count; +}; From 135fa6ea2f2676ed8cca9d3c51c839d927f919ee Mon Sep 17 00:00:00 2001 From: jangwonyoon Date: Fri, 12 Sep 2025 14:56:38 +0900 Subject: [PATCH 2/2] solved2: countSubstrings --- palindromic-substrings/jangwonyoon.js | 50 ++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/palindromic-substrings/jangwonyoon.js b/palindromic-substrings/jangwonyoon.js index f04c067ad..2afbe16a8 100644 --- a/palindromic-substrings/jangwonyoon.js +++ b/palindromic-substrings/jangwonyoon.js @@ -2,7 +2,7 @@ * @param {string} s * @return {number} * - * 풀이 방법 + * 풀이 방법 1 * * 1. brute force 를 사용해서 모든 경우의 수를 구한다. * 2. 투포인터를 통해 isPalindrome 을 확인한다. @@ -46,3 +46,51 @@ var countSubstrings = function(s) { return count; }; + +/** + * 풀이 방법 2 + * + * 1. dfs를 통해 모든 경우의 수를 구한다. + * 2. isPalindrome 함수를 통해 팰린드롬인지 확인한다. + * + * 복잡성 + * + * Time Complexity: O(n^2) + * Space Complexity: O(1) + */ + +function isPalindrome(s) { + let left = 0; + let right = s.length - 1; + + while (left < right) { + if (s[left] !== s[right]) return false; + left++; + right--; + } + + return true; +} + +var countSubstrings = function(s) { + let count = 0; + + function dfs(startIdx) { + // 모든 시작점 탐색 완료 + if (startIdx === s.length) return; + + // 현재 시작점에서 가능한 모든 끝점 확인 + for (let end = startIdx; end < s.length; end++) { + const sub = s.slice(startIdx, end + 1); + if (isPalindrome(sub)) { + count++; + } + } + + // 다음 시작점으로 이동 + dfs(startIdx + 1); + } + + dfs(0); + return count; +};