From cb0f1465c6a799fd263de12fbb6039f00c69fd02 Mon Sep 17 00:00:00 2001 From: raejun92 Date: Sun, 22 Mar 2026 21:17:29 +0900 Subject: [PATCH] feat(raejun): add Backspace String Compare, Counting Bits solutions --- raejun/BackspaceStringCompare.js | 55 ++++++++++++++++++++++++++++++++ raejun/CountingBits.js | 34 ++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 raejun/BackspaceStringCompare.js create mode 100644 raejun/CountingBits.js diff --git a/raejun/BackspaceStringCompare.js b/raejun/BackspaceStringCompare.js new file mode 100644 index 0000000..7c49854 --- /dev/null +++ b/raejun/BackspaceStringCompare.js @@ -0,0 +1,55 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var backspaceCompare = function (s, t) { + const stack1 = []; + const stack2 = []; + + for (let i = 0; i < s.length; i++) { + const char = s[i]; + + if (s[i] === "#") { + if (stack1.length) { + stack1.pop(); + } + } else { + stack1.push(char); + } + } + + for (let i = 0; i < t.length; i++) { + const char = t[i]; + + if (t[i] === "#") { + if (stack2.length) { + stack2.pop(); + } + } else { + stack2.push(char); + } + } + + return stack1.join("") === stack2.join(""); +}; + +/* +16분 걸림. + +시간 복잡도는 O(n + m)이다. n과 m은 각각 s와 t의 길이이다. +공간 복잡도는 O(n + m)이다. stack1과 stack2의 크기는 각각 s와 t의 길이까지 될 수 있기 때문이다. + +stack을 이용해서 문제를 풀었다. +stack에 문자를 넣다가 #이 나오면 stack에서 pop을 해주었다. +stack1과 stack2를 만들어서 각각 s와 t를 처리해주었다. +마지막에 stack1과 stack2를 문자열로 만들어서 비교해주었다. + + +처음에 문제 이해하는데 시간이 좀 걸렸다. +backspace를 space로 착각했다. +문제를 제대로 이해하고 나서 stack을 이용해서 문제를 풀었다. + +O(n)의 풀이를 보면 뒤에서부터 비교해가면서 #이 나오면 #과 그 앞의 문자를 건너뛰는 방식으로 풀이한다. +while 문을 중첩을 하는데 O(n)으로 나오는 걸 보고 +*/ diff --git a/raejun/CountingBits.js b/raejun/CountingBits.js new file mode 100644 index 0000000..0fa192a --- /dev/null +++ b/raejun/CountingBits.js @@ -0,0 +1,34 @@ +/** + * @param {number} n + * @return {number[]} + */ +var countBits = function (n) { + const result = []; + + for (let i = 0; i <= n; i++) { + const len = i + .toString(2) + .split("") + .filter((num) => num === "1") + .join("").length; + + result.push(len); + } + + return result; +}; + +/* +7분 걸림. + +시간 복잡도는 O(nlogn)이다. n은 입력값이다. +공간 복잡도는 O(n)이다. result 배열의 크기는 n + 1이기 때문이다. + +0부터 n까지의 수를 2진수로 바꾼다. +2진수 문자열을 split으로 나누고 filter로 1인 것만 남긴다. +남은 문자열을 join으로 합쳐서 길이를 구한다. +길이를 result 배열에 push한다. + +많은 메서드를 이용해서 풀이를 했는데 비트연산을 이용한 점화식 풀이를 보았다. +많은 지식을 알고 있으면 풀이 방법이 다양해지는 것 같다. +*/