String ์ด์ฉ - ์ฝ๊ฐ ๋๋ฆผ but ๊ฐ๋จ
- number๋ฅผ string์ผ๋ก ๋ฐ๊พธ์ด์ ์ ๊ทผํ๋ ๋ฐฉ์
- number๋ก ๋ค์ ๋ค๋ฃจ๊ณ ์ถ๋ค๋ฉด toInteger ์ถ๊ฐํด์ผํจ
number.toString(); // ์ด๋ ๊ฒํด์ index๋ก ์ ๊ทผ ๊ฐ๋ฅ
Math ์ด์ฉ - ๋ ๋น ๋ฆ but ์ฝ๊ฐ ๋ณต์ก
- number๋ฅผ 10์ผ๋ก ๋๋์ด์ ๋ท์๋ฆฌ๋ถํฐ ๋ผ์ด๋ด๋ ๋ฐฉ์
- number๋ก ๋ค์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์
let arr = [];
let number = 155;
do {
arr.unshift(number % 10);
number = Math.floor(number / 10);
} while (number > 0);
// arr=[1,5,5]
- 10์ง์ -> 16 ์ง์
let dec = 123;
let hex = dec.toString(16);
- 10์ง์ -> 2 ์ง์
let dec = 123;
let bin = dec.toString(2);
- 16์ง์ -> 10์ง์
let hex = "7b";
let dec = parseInt(hex, 16);
- 2์ง์ -> 10์ง์
let bin = "1111011";
let dec = parseInt(bin, 2);
- 2์ง์ -> 16์ง์
let bin = "1111011";
let hex = parseInt(bin, 2).toString(16);
์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ฐ๋ก๋ฐ๋ก set ์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ์๋ค. new Set์ ์์ฑํ๊ณ ํ๋ผ๋ฏธํฐ๋ก ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋ฐฐ์ด ๋ด๋ถ์ ์ค๋ณต๋ ์์๊ฐ ์ ๊ฑฐ๋๋ค
let set = [...new Set(array)];
const arr = Array.from({ length: n }, (_, i) => i + 1); // 1๋ถํฐ N ๊น์ง
const arr = Array.from(new Array(n)); // 0๋ถํฐ N-1 ๊น์ง
- ํด์ฌ๋งต์ด๋ ํด์ฌํ
์ด๋ธ ์ฒ๋ผ
key-value ์
์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ, ์ถํ์ ์ฌ์ฉํ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผ ํ ์ ์๋๋ก ๋์์ฃผ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. - ์๋ฐ์คํฌ๋ฆฝํธ์์๋
ES6 Map
์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ผ๋ฐ ๊ฐ์ฒด์ ๋ค๋ฅธ์ ์ key ๊ฐ์ผ๋ก ์ฌ๋ฌ๊ฐ์ง ํ์ ์ ๋ฃ์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ํ Linked List ๋ก ๊ตฌํ๋์ด์๊ธฐ ๋๋ฌธ์ orderable ํ๊ณ , iterable ํ๋ฉฐ, ์ง์ ๋ size์ ๋ฐ๋ผ ํ์ ๋ ๋ฐ์ดํฐ๋ง ์ ์ฅ ํ ์๋ ์๋ค.
let hasMap = new Map([
[1, "first"],
[2, "second"],
[3, "third"],
]);
- hasMap.size() - ํด์ฌ๋งต์ ์ ์ฅ๋ ์์ ๊ฐฏ์ ๋ฐํ
- hasMap.get(key) - key ๊ฐ์ ํด๋นํ๋ ์์ ๋ฐํ
- hasMap.has(key) - ํด์ฌ๋งต์ key๊ฐ ์กด์ฌ ์ฌ๋ถ ๋ฐํ
- hasMap.set(key, value) - ํด์ฌ๋งต์ ์ ์ฅ
- hasMap.delete(key) - key ๊ฐ์ ํด๋นํ๋ ์์ ์ญ์
- hasMap.clear() - ๋ชจ๋ ์๋ฆฌ๋จผํธ ์ญ์
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
const dictionary = letters.reduce((d, a, i) => ((d[a] = i + 1), d), {});
const dictionary = [...new Array(128)].reduce((acc, _, index) => {
return { ...acc, [+index]: 0 };
}, {});
for (let i = 0; i < m; i++) {
dictionary[t[i].charCodeAt(0)]++;
}
ํน์ ์ผ๋ฐ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ 0 ์ผ๋ก fill ํด๋ ok
const matrix = new Array(N + 1).fill(INF).map(() => new Array(N + 1).fill(INF));
const newArr = [].concat(...twoDimesionArr);
- ์ฒซ๋ฒ์งธ ์ธ์ : ์์ํ๋ ์ธ๋ฑ์ค
- ๋๋ฒ์งธ ์ธ์ : ๋๋๋ ์ธ๋ฑ์ค + 1
const str = "alogrithm";
console.log(str.substring(0,3)); // alo
๋ฐฐ์ด์ ์ ๊ทผํด์ผ ํ ๋ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค. ํนํ๋ ๋ฐฐ์ด ๋ด๋ถ์ ์์๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๋ ์์ก์๋จน๊ณ ์์ฃผ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์๋ค
- 1์ฐจ์ ๋ฐฐ์ด์์ ์๋ก ๋ค๋ฅธ ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌ์ผ ์กฐ์์ ํ๋ค.
- ์๋ ์์๋ ๋ฐฐ์ด nums์ ์กด์ฌํ๋ 0์ ๋ชจ๋ ์ ๊ฑฐํ์ฌ ๋ฐฐ์ด์ ๋งจ ๋ค๋ก ๋ณด๋ด๋ ๋ฌธ์ ์ด๋ค.
var moveZeroes = function (nums) {
let i = 0;
for (let j = 0; j < nums.length; j++) {
if (nums[j] !== 0) {
nums[i] = nums[j];
i++;
}
}
while (i < nums.length) {
nums[i] = 0;
i++;
}
};
๋ฐฐ์ด ๋ด๋ถ์์ ์๋ธ ๋ฐฐ์ด์ ๋ํ ์ฐ์ฐ์ ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค
- ๋ฐฐ์ด A ์์ ๊ธธ์ด N ์ ์๋ธ๋ฐฐ์ด์ ๋ชจ๋ ํ์ํด์ผ ํ ๋, ์ผ์ผ์ด ๋ค ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ฌด๋ ๋นํจ์จ์ ์ด๋ค ์๋ํ๋ฉด, ์๋ธ๋ฐฐ์ด๋ค์ ์๋ก ๊ฒน์น๊ฒ ๋๊ณ , ๊ทธ๋ฌ๋ฏ๋ก ์๋ธ ๋ฐฐ์ด ๋ผ๋ฆฌ ๊ณตํต์์๊ฐ ๋ถ๋ช ํ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค
- ๊ทธ๋ฆฌ๊ณ ์ด ๊ณตํต์์๋, ์ด์ ์๋ธ๋ฐฐ์ด์ ๋งจ ์ฒซ ์์์, ์๋ก์ด ์๋ธ๋ฐฐ์ด์ ๋งจ ๋ง์ง๋ง ์์๋ฅผ ์ ์ธํ ๋ถ๋ถ์ ํด๋นํ๋ค.
// ๊ธธ์ด๊ฐ n ์ธ ์๋ธ๋ฐฐ์ด์ ํฉ์ ์ ์ฅํด๋์ ๋ฐฐ์ด์ ๋ฐํํ๋ค
const slidingWindow = function (arr, n) {
let startIndex = 0;
let results = [];
let length = arr.length;
let sum = 0;
for (let i = 0; i < length; i++) {
if (i - startIndex === n) {
// ์๋ธ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ n ์ด ๋์์ ๊ฒฝ์ฐ
results.push(sum); // ๊ตฌํด๋์ sum์ push ํด์ฃผ๊ณ
sum -= arr[startIndex]; // sum์์ ์ด์ ์๋ธ๋ฐฐ์ด์ ๋งจ ์ ์์ ๊ฐ์ ์ญ์ ํ๋ค
startIndex = i; // startIndex๋ฅผ ๋ฐ๊พธ์ด์ค๋ค.
} else {
sum += arr[i]; // ์๋ธ๋ฐฐ์ด ํฌ๊ธฐ ๋ํ๊ธฐ
}
}
return results;
};
์ฌ์ดํด ๋ํ ์ , ์ฆ ์ฃผ์ด์ง ๋ฐฐ์ด ํน์ ๋งํฌ๋๋ฆฌ์คํธ์ ์ฌ์ดํด์ด ์กด์ฌํ๋์ง / ์ฌ์ดํด์ ์์ ์์น๋ฅผ ์ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ ์ด๋ค.
- ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌํ๋ฒ์ ์ผ๋ก, ํ ๋ผ ํฌ์ธํฐ๋ ๋์นธ์ฉ ์ด๋ํ๊ณ ๊ฑฐ๋ถ์ด ํฌ์ธํฐ๋ ํ์นธ ์ฉ ์ด๋ํ๋ค.
- ์ด๋ฌ๋ค๊ฐ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ์๋ก ์์น๊ฐ ๋ฐ๋๊ฒ ๋๊ณ (์ฒ์์๋ ๊ฑฐ๋ถ์ด -> ํ ๋ผ ์์ง๋ง ๊ณ์ ๊ฑฐ๋ญํ๋ค๋ณด๋ฉด ํ ๋ผ --> ๊ฑฐ๋ถ์ด ์ธ ์ํฉ๊น์ง ์จ๋ค. ์๋? ์ฌ์ดํด์ด ์์ผ๋๊น. ์ฌ๊ธฐ์ ํ ๋ผ๊ฐ ๋จผ์ null์ ๋๋ฌํ๋ฉด ์ฌ์ดํด์ด ์๋ ๊ฒ์ด๋ค) ๋ง์ง๋ง์ผ๋ก ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ๋ง๋๊ฒ ๋๋ฉด, ์ฌ์ดํด์ด ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ ์ ์๋ค.
- ์ฌ์ค ํ ๋ผ์ ๊ฑฐ๋ถ์ด์ ์์๊ฐ ๋ค๋ฐ๋ ๋๊ฐ ๋ฐ๋ก ์ฌ์ดํด์ด ์ต์ด๋ก ๋ฐ๊ฒฌ ๋ ๋์ธ๋ฐ, ์ด ๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์์๋ฅผ ๊ฒ์ฆํ ์ ์์ผ๋ฏ๋ก, ํ ๋ผ์ ๊ฑฐ๋ถ์ด์ ์์น๊ฐ ๊ฐ์์ง ๋ ๊น์ง ์ฐ์ฐ์ ๋ ํ๋ ๊ฒ์ด๋ค.
์ ๋ง ์ฌ์ดํด์ด ์๋ค๊ณ ํด์ ๋์นธ์ฉ ์์ง์ด๋ ํ ๋ผ์ ํ์นธ์ฉ ์์ง์ด๋ ๊ฑฐ๋ถ์ด๊ฐ ๋ง๋ ์ ์๋ ? ์๋ง๋ ์๋ ์์ง ์์๊น?
- ์ฌ์ดํด์ด ์์ ๊ฒฝ์ฐ๋ ๊ผญ ํ ๋ผ์ ๊ฑฐ๋ถ์ด์ ์์น๊ฐ ๋ค๋ฐ๋๊ฒ ๋๊ณ , (ํ ๋ผ๊ฐ ์ฌ์ดํด์ ๋ฐ๋ผ์ ๊ฐ๊ฒ ๋๋ฏ๋ก..) ๋ค๋ฐ๋ ํ ๋ถํฐ, ํ ๋ผ์ ๊ฑฐ๋ถ์ด์ ์ฐจ์ด๋ 1 ์ฉ ๊ฐ์ํ๊ฒ ๋๋ค. (2 -> 1 - > 0 ) ๊ทธ๋ฌ๋ฉด ๋น์ฐํ ์ฐจ์ด๊ฐ 0๊น์ง๋ ๊ฐ์ํ๊ฒ ๋๋ฏ๋ก ๋์ ๊ผญ ๋ง๋๊ฒ ๋์ด์๋ค!
- ์คํดํ์ง ๋ง์์ผ ํ ๊ฒ์ด, ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ๋ง๋๋ ์ง์ ์ด ์ฌ์ดํด์ ์ฆ๋ช
ํ๋ ์ง์ ์ ์๋๋ผ๋ ๊ฒ์ด๋ค.
ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ๋ง๋๋ค๋ ์ฌ์ค
๋ง์ด ์ฌ์ดํด์ ์ฆ๋ช ํ๋ค.
var hasCycle = function (head) {
if (!head) return false;
let slow = head;
let fast = head.next;
while (slow !== fast) {
if (fast === null || fast.next === null) return false;
slow = slow.next;
fast = fast.next.next;
}
return true;
};
- ์ฌ์ดํด์ ์์์ ์
๊ฑฐ๋ถ์ด๊ฐ ํ ๋ผ๋ฅผ ์ฒ์ ์์ง๋ฅด๊ฒ ๋์์ ๋ ํ ๋ผ์ ์์น
๊ฐ ๋๋ค.
- ์ ๋ ฌ๋์ด์์ ๊ฒฝ์ฐ์๋ ์ด๋ถํ์์ ์ฌ์ฉํ๋ฉด ํน์ ๊ฐ์ O(log n) ์ ์๊ฐ ๋ณต์ก๋๋ก ์ฐพ์ ์ ์๋ค.
function binarySearch(array, target, length) {
let start = 0;
let end = length - 1;
while (start <= end) {
let mid = start + Math.floor((end - start) / 2);
if (array[mid] === target) {
return mid;
} else if (array[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
- ์ด๋ถํ์์ ์์ฉํ ๋ฐฉ๋ฒ์ด๋ค.
function getLowerBound(array, target, length) {
let low = 0;
let high = length;
while (low < high) {
let mid = low + Math.floor((high - low) / 2);
if (array[mid] < target) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
UpperBound - ์ ๋ ฌ๋ ์๋ฃ์์ target ์ ์ด๊ณผํ ๊ฐ์ด ์ฒ์ ๋์ค๋ ์์น๋ฅผ ์ฐพ์์ค๋ค.
function getUpperBound(array, target, length) {
let low = 0;
let high = length;
while (low < high) {
let mid = low + Math.floor((high - low) / 2);
if (array[mid] <= target) {
low = mid + 1;
} else {
high = mid;
}
}
return high;
}