From 4cffb452acb82eb0a5600182e0aad95f5ca5ab09 Mon Sep 17 00:00:00 2001 From: yeeZinu <doglife222@gmail.com> Date: Tue, 17 Dec 2024 09:57:12 +0900 Subject: [PATCH 1/3] valid anagram solution --- valid-anagram/yeeZinu.js | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 valid-anagram/yeeZinu.js diff --git a/valid-anagram/yeeZinu.js b/valid-anagram/yeeZinu.js new file mode 100644 index 000000000..54ede30dd --- /dev/null +++ b/valid-anagram/yeeZinu.js @@ -0,0 +1,77 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + * + */ + +var isAnagram = function (s, t) { + // 두 문자열의 길이가 같지않다면 false + if (s.length !== t.length) { + return false; + }; + + // Map을 사용해서 데이터 최신화 + let count = new Map(); + + // set으로 해당 문자를 key, 갯수를 value로 카운트 + for (let char of s) { + count.set(char, (count.get(char) || 0) + 1) + } + + for (let char of t) { + // 새로운 문자가 map에 없거나, 이미 카운트가 0이라면 false + if (!count.has(char) || count.get(char) === 0) { + return false; + } + // 문자 카운트 -1 + count.set(char, (count.get(char) - 1)) + } + + return true; +} + +/* + * 문제: 두 문자열의 구성요소 비교 + * + * 생각: 각 문자열에 상대 문자열의 스펠링이 있는지 확인하고 splice로 제거 + * 결과: 타임리밋 +var isAnagram = function (s, t) { + if (s.length !== t.length) { + return false; + }; + + let sArr = []; + let tArr = []; + let finder = 0; + + for (let j = 0; j < s.length; j++) { + sArr.push(s[j]); + tArr.push(t[j]); + } + + // 반복문을 돌며 s와 t를 비교 + for (let i = 0; i < s.length; i++) { + //s[i]번 째가 t안에 있다면? + if (tArr.indexOf(sArr[0]) !== -1) { + // 찾은 인덱스를 저장해 줌 -> sArr 에서 splice먼저해버리면 배열이 달라져서 못찾음;; + finder = tArr.indexOf(sArr[0]); + //s[i]를 스플라이스로 빼고 + sArr.splice(0, 1); + //t의 인덱스번호를 슬라이스로 뺌 + tArr.splice(finder, 1); + } + console.log(i); + console.log(sArr); + console.log(tArr); + } + + // s와 t의 길이가 0이면 true 아니면 fales + if (sArr.length === 0 && tArr.length === 0) { + return true; + } + else return false + +}; + +*/ From 1dea90948136052ad11f604f010b3a929e0a0b8c Mon Sep 17 00:00:00 2001 From: yeeZinu <doglife222@gmail.com> Date: Tue, 17 Dec 2024 12:35:43 +0900 Subject: [PATCH 2/3] climbling stairs soltion --- climbing-stairs/yeeZinu.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 climbing-stairs/yeeZinu.js diff --git a/climbing-stairs/yeeZinu.js b/climbing-stairs/yeeZinu.js new file mode 100644 index 000000000..73a2fb7a9 --- /dev/null +++ b/climbing-stairs/yeeZinu.js @@ -0,0 +1,21 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function (n) { + // n+1 배열을 만들고 0으로 초기화 + const dp = new Array(n + 1).fill(0); + + // 인덱스 0번과 1번은 1로 초기화 + dp[0] = 1; + dp[1] = 1; + + // 이전계단과 그 이전 계단의 합이 계단을 올라갈 수 있는 총합 + for (let i = 2; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n]; +}; + +console.log(climbStairs(5)); From 9ce43d116346494fd1a778694302774d8e0e03a0 Mon Sep 17 00:00:00 2001 From: yeeZinu <doglife222@gmail.com> Date: Wed, 18 Dec 2024 13:24:45 +0900 Subject: [PATCH 3/3] 3sum solution --- 3sum/yeeZinu.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 3sum/yeeZinu.js diff --git a/3sum/yeeZinu.js b/3sum/yeeZinu.js new file mode 100644 index 000000000..82d952089 --- /dev/null +++ b/3sum/yeeZinu.js @@ -0,0 +1,54 @@ +/** + * @param {number[]} nums + * @return {number[][]} + * + * 문제: 세 수를 더해서 0을 만들어야함. + * + * 주의사항: 인덱스 상관없어 세 수의 조합이 같으면 안됨. + * 핵심: 배열을 오름차순으로 정렬해서 + * 양 끝에 각 인덱스넣고 사이에 있는인덱스로 계속 더하면서 + * 좌우 인덱스를 0에 가깝게 +- 하면된다~ + * + */ +var threeSum = function (nums) { + // 결과를 저장할 배열 + let result = []; + // 주어진 수를 오름차순으로 정렬 + nums.sort((a, b) => a - b); + + for (let i = 0; i < nums.length; i++) { + // nums[i] > 0보다 크다면? 반복 끝 + if (nums[i] > 0) { + break; + } + + let j = i + 1; // 중간에서 바뀔 인덱스 + let k = nums.length - 1; // 맨 마지막에서 부터 움직일 인덱스 + + while (j < k) { + let sum = nums[i] + nums[j] + nums[k]; + + // 총합이 양수라면 k인덱스 한칸뒤로 ㄱ + if (sum > 0) { + k--; + } + // 음수라면 j진행 ㄱ + else if (sum < 0) { + j++; + } + // 0이면 result배열에 추가, j진행 + else { + result.push([nums[i], nums[j], nums[k]]); + j++; + + // j가 이전값과 같다면 무시하고 진행하기 + while (nums[j] === nums[j - 1] && j < k) { + j++; + } + } + } + } + + return result; + +};