νλ‘κ·Έλλ¨Έμ€ λ¬Έμ νμ΄ - μμ μνΈ / μ μ λ΄λ¦Όμ°¨μμΌλ‘ λ°°μΉνκΈ° / μ΄μν λ¬Έμ λ§λ€κΈ° / μ΅λ곡μ½μμ μ΅μ곡배μ
μ΄μ§ νΈλ¦¬ / κ²μ, μ½μ , μμ / μ λ ¬λ λ°°μ΄ VS μ΄μ§ νΈλ¦¬
π λ΄κ° μμ±ν νμ΄
function solution(s, n) {
const lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
const upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const newArr = s.split('').map(item => {
// 곡백
if (item === ' ') {
return ' ';
}
if (lower.includes(item)) { // μλ¬Έμ
const stringIndex = lower.indexOf(item) + n
if (stringIndex <= 25) {
return lower[stringIndex];
} else {
const newIndex = stringIndex % 25 - 1;
return lower[newIndex];
}
} else { // λλ¬Έμ
const stringIndex = upper.indexOf(item) + n
if (stringIndex <= 25) {
return upper[stringIndex];
} else {
const newIndex = stringIndex % 25 - 1;
return upper[newIndex];
}
}
});
return newArr.join('');
}
π λ€λ₯Έ μ¬λμ νμ΄ 1
λμ κ°μ νλ¦μΌλ‘ νμλλ° ν¨μ¬ 짧λ€. μ‘°κ±΄λΆ μΌν μ°μ°μλ₯Ό μ΄μ©ν΄textArr λ³μμ λ¨Όμ lowerμΈμ§ upperμΈμ§ νλ¨ν΄ λ°°μ΄μ ν λΉν νμ ν λ²μ μ½λλ₯Ό μμ±νλ€.
λλ λ¬Έμ λ₯Ό λ³Έ ν map()μ΄ μκ°λμ λ¬Έμμ΄μ λ°°μ΄λ‘ λ°κΏ¨λλ° κ΅³μ΄ λ°°μ΄λ‘ λ°κΏ νμλ μ ν μμλ€.
function solution(s, n) {
var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lower = "abcdefghijklmnopqrstuvwxyz";
var answer= '';
for(var i =0; i <s.length; i++){
var text = s[i];
if(text == ' ') {
answer += ' ';
continue;
}
var textArr = upper.includes(text) ? upper : lower;
var index = textArr.indexOf(text) + n;
if(index >= textArr.length) {
index -= textArr.length;
}
answer += textArr[index];
}
return answer;
}
π λ€λ₯Έ μ¬λμ νμ΄ 2
function solution(s, n) {
const chars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY "
return s.split('').map(e => chars[chars.indexOf(e)+n]).join('');
}
π λ΄κ° μμ±ν νμ΄
function solution(n) {
const string = (n + '').split('').sort((a, b) => b - a).join('');
return parseInt(string);
// return +string;
}
π λ΄κ° μμ±ν νμ΄
function solution(s) {
return s.split(' ').map(s => s.split('').map((s, i) => i % 2 === 0 ? s.toUpperCase() : s.toLowerCase()).join('')).join(' ');
}
π λ΄κ° μμ±ν νμ΄
function solution(n, m) {
const limit = n < m ? m : n;
const common_factor = [];
for (let i = 1; i <= limit; i++) {
if (n % i === 0 && m % i === 0) {
common_factor.push(i);
}
}
const gcf = Math.max(...common_factor);
const lcm = gcf * (n / gcf) * (m / gcf);
return [gcf, lcm];
}
π μ λ ¬λ λ°°μ΄ : κ²μ λΉ λ¦(μ΄μ§ κ²μ) / μ½μ , μμ λλ¦Ό
π ν΄μ ν μ΄λΈ : κ²μ, μ½μ , μμ λΉ λ¦ / μμ μ μ§ λΆκ°λ₯
π μ΄μ§ νΈλ¦¬ : κ²μ, μ½μ , μμ λΉ λ¦ / μμ μ μ§ κ°λ₯
π νΈλ¦¬(Tree)
νΈλ¦¬λ μ°κ²° 리μ€νΈμ λ§μ°¬κ°μ§λ‘ λ
Έλ κΈ°λ° μλ£ κ΅¬μ‘°
μ΄λ€.
μ°κ²° 리μ€νΈμμ κ° λ
Έλλ λ€λ₯Έ ν λ
Έλλ‘μ λ§ν¬λ§ ν¬ν¨νλ λ°λ©΄,
νΈλ¦¬μμ κ° λ
Έλλ μ¬λ¬ λ
Έλλ‘μ λ§ν¬
λ₯Ό ν¬ν¨νλ€.
κ°μ₯ μμ λ Έλλ₯Ό '루νΈ'λΌκ³ λΆλ₯Έλ€.
'λΆλͺ¨' λ Έλλ 'μμ' λ Έλλ₯Ό κ°μ§λ€.
νΈλ¦¬μλ 'λ 벨'μ΄ μλ€.
π μ΄μ§ νΈλ¦¬(Binary Tree)
κ° λ Έλμ μμμ 0 ~ 2κ°μ΄λ€.
ν λ Έλμ μμμ΄ λμ΄λ©΄, ν μμμ λΆλͺ¨λ³΄λ€ μμ κ°μ, λ€λ₯Έ μμμ λΆλͺ¨λ³΄λ€ ν° κ°μ κ°μ ΈμΌ νλ€.
p.241
PythonμΌλ‘ ꡬνλ μ½λ β JavaScriptλ‘ λ³ν
class TreeNode {
constructor(data, left_child = null, right_child = null) {
this.data = data;
this.left_child = left_child;
this.right_child = right_child;
}
}
// μΌμͺ½ λ
Έλμ μ€λ₯Έμͺ½ λ
Έλλ₯Ό λ§λ€κ³
const node_1 = new TreeNode(1);
const node_2 = new TreeNode(10);
// μ΄λ₯Ό μ΄μ©ν΄ 루νΈ(κ°μ₯ μμ λ
Έλ)λ₯Ό λ§λ λ€
const root = new TreeNode(5, node_1, node_2);
console.log(root);
// TreeNode {data: 5, left_child: TreeNode, right_child: TreeNode}
루νΈ
λΆν° μμν΄μΌ νλ€pp.242 ~ 257
PythonμΌλ‘ ꡬνλ μ½λ β JavaScriptλ‘ λ³ν
class TreeNode {
constructor(value, left_child = null, right_child = null) {
this.value = value;
this.left_child = left_child;
this.right_child = right_child;
}
}
// νΈλ¦¬ λ
Έλ μμ±
const node_1 = new TreeNode(1);
const node_2 = new TreeNode(10);
const root = new TreeNode(5, node_1, node_2);
console.log(root); // TreeNode {value: 5, left_child: TreeNode, right_child: TreeNode}
// κ²μ β (μ°Ύλ κ°μ΄ μ΄λ€ λ
Έλμ μλμ§λ₯Ό κ²μ)
function search(value, node) {
if (node === null || node.value === value) {
return node;
} else if (node.value < value) {
return search(value, node.right_child);
} else {
return search(value, node.left_child);
}
}
const search8 = search(8, root); // νΈλ¦¬ κ²μμ λ°λμ '루νΈ'λΆν° μμν΄μΌ ν¨
console.log(search8); // null
// μ½μ
β
function insert(value, node) {
if (node.value < value) { // λμ λΉκ΅
if (node.right_child === null) { // λ μ΄μ μμ λ
Έλκ° μμΌλ©΄
node.right_child = new TreeNode(value); // κ·Έ μμΉμ μ λ
Έλ μΆκ°
} else {
insert(value, node.right_child); // μμ λ
Έλκ° μμΌλ©΄ λ€μ λμ λΉκ΅
}
} else if (node.value > value) { // λμ λΉκ΅
if (node.left_child === null) { // λ μ΄μ μμ λ
Έλκ° μμΌλ©΄
node.left_child = new TreeNode(value); // κ·Έ μμΉμ μ λ
Έλ μΆκ°
} else {
insert(value, node.left_child); // μμ λ
Έλκ° μμΌλ©΄ λ€μ λμ λΉκ΅
}
}
}
const insert13 = insert(13, root);
console.log(root); // κ°μ΄ 10μΈ λ
Έλμ μ€λ₯Έμͺ½ μμ λ
Έλμ κ°μ΄ 13μΈ λ
Έλκ° μΆκ°λ¨
// π₯ 'μ' μ¬κ· ν¨μλ₯Ό μ¬μ©ν΄μ ꡬννλκ°? μ΄λ»κ² μ΄μ§ νΈλ¦¬μ μλ―Έλ₯Ό μ νμ μ¬κ· ν¨μλ₯Ό μ¬μ©ν΄μ ꡬνν΄μΌ κ² λ€κ³ μκ°ν μ μλ κ±ΈκΉ.
// π₯ ν
μ€νΈ μΌμ΄μ€λ₯Ό μΆκ°ν΄ νΈμΆ μ€νμ κ·Έλ¦ΌμΌλ‘ κ·Έλ €μ μ°¨κ·Όμ°¨κ·Ό λ°λΌκ°λ©΄ μ΄ν΄κ° λλ κ²λ κ°μλ° μ½λλ§ λ³΄λ©΄ λ§λ§νλ€. κ²°κ΅ μ΄ν΄ μλλ€λ λ».
// μμ β
function remove(valueToRemove, node) {
// κΈ°μ 쑰건
if (node === null) {
return null;
} else if (valueToRemove < node.value) {
node.left_child = remove(valueToRemove, node.left_child);
} else if (valueToRemove > node.value) {
node.right_child = remove(valueToRemove, node.right_child);
} else { // νμ¬ λ
Έλκ° μμ νλ €λ λ
ΈλμΈ κ²½μ°
if (node.left_child === null) {
return node.right_child;
} else if (node.right_child === null) {
return node.left_child;
} else { // νμ¬ λ
Έλμ μμ λ
Έλκ° λμ΄λ©΄
node.right_child = lift(node.right_child, node);
return node;
}
}
}
function lift(node, nodeToRemove) {
if (node.left_child) {
node.left_child = lift(node.left_child, nodeToRemove);
return node;
} else {
nodeToRemove.value = node.value;
return node.right_child;
}
}
const remove5 = remove(10, root);
console.log(root); // κ°μ΄ 10μΈ λ
Έλκ° μμ λκ³ , κ°μ΄ 13μΈ λ
Έλκ° κ·Έ μ리μ μμΉνκ² λ¨
πββοΈ Q1. μ μ½λ μ€ μ΄μ§ νΈλ¦¬μ 'μμ ' λΆλΆμ΄ μ΄ν΄κ° μλλ€.
κ²μ
κ° λ¨κ³λ₯Ό μνν λλ§λ€ λμ λΉκ΅λ₯Ό ν΅ν΄ κ°μ΄ λ€μ΄ μλ κ³΅κ° μ€ λ°μ μ κ±°νλ€.
λ°λΌμ, μ΄μ§ νΈλ¦¬ κ²μμ ν¨μ¨μ±
μ O(logN)
μ΄λ€.
+) μ λ ¬λ λ°°μ΄ κ²μ(μ΄μ§ κ²μ)μ ν¨μ¨μ±μΈ O(logN)κ³Ό κ°λ€.
μ½μ
λ¨Όμ , μ λ
Έλκ° λ€μ΄κ° μ¬λ°λ₯Έ μμΉλ₯Ό μ°ΎμμΌ νλ€.
κ° λ¨κ³λ₯Ό μνν λλ§λ€ λμ λΉκ΅λ₯Ό μ§ννλ€.
μ΄λ, μ λ ¬λ λ°μ΄ν°λ₯Ό νΈλ¦¬μ μ½μ νλ©΄, λΆκ· νμ΄ μ¬ν νΈλ¦¬κ° λκ³ ν¨μ¨μ±μ΄ μ μ’μ νλ₯ μ΄ λλ€. β μ΅μ μ μλλ¦¬μ€ O(N)
ex) 1 ~ 5λ₯Ό μμλλ‘ (κ³μ μ€λ₯Έμͺ½ λ Έλμλ§) μ½μ ν νΈλ¦¬μμ 5λ₯Ό κ²μνκΈ° μν΄μλ 5λ¨κ³ μ¦, O(N)μ΄ κ±Έλ¦°λ€.
λ°λ©΄,
무μμ
λ‘ μ λ ¬λ λ°μ΄ν°λ₯Ό νΈλ¦¬μ μ½μ νλ©΄, λκ° κ· ν μ‘ν νΈλ¦¬κ° λκ³ ν¨μ¨μ±μ΄ μ’μ νλ₯ μ΄ λλ€. β νκ· μλλ¦¬μ€ O(logN)ex) 3, 2, 4, 1, 5λ₯Ό μμλλ‘ μ½μ ν νΈλ¦¬μμ 5λ₯Ό κ²μνκΈ° μν΄μλ 3λ¨κ³κ° 걸릴 λΏμ΄λ€.
λ μ΄μ μμμ΄ μλ λ
Έλκ° λμ¬ λκΉμ§ λμ λΉκ΅λ₯Ό κ³μ μ§ννλ€.
λ μ΄μ μμμ΄ μλ λ
Έλ μ¦, μ¬λ°λ₯Έ μμΉλ₯Ό μ°ΎμμΌλ©΄, 1λ¨κ³μ κ±Έμ³ μ½μ
μ μ§ννλ€. (λΉ
μ€λ μμ 무μ)
λ°λΌμ, νκ· μ μΈ μλ리μ€μμ μ΄μ§ νΈλ¦¬ μ½μ
μ ν¨μ¨μ±
μ O(logN)
μ΄λ€.
+) μ λ ¬λ λ°°μ΄ μ½μ μ ν¨μ¨μ±μΈ O(N)μ λΉν΄ λ§€μ° μ’λ€.
π‘ μ λ ¬λ λ°°μ΄μ μ΄μ§ νΈλ¦¬λ‘ λ³ννκ³ μ ν λλ, λ¨Όμ λ°μ΄ν° μμλ₯Ό
무μμ
λ‘ λ§λλ κ² μ’λ€ !
μμ
μμ ν λ
Έλμ μμμ΄ μμΌλ©΄
, κ·Έλ₯ μμ νλ€
μμ ν λ
Έλμ μμμ΄ νλλ©΄
, λ
Έλλ₯Ό μμ νκ³ κ·Έ μμμ μμ λ λ
Έλκ° μλ μμΉμ λ£λλ€.
μμ ν λ
Έλμ μμμ΄ λμ΄λ©΄
, μμ λ λ
Έλλ₯Ό νμμ λ
Έλλ‘ λ체νλ€.
νμμ λ
Έλλ μμ λ λ
Έλλ³΄λ€ ν° κ° μ€ μ΅μκ°μ κ°λ μμ λ
Έλλ€.
λ¨, νμμ λ Έλμ μ€λ₯Έμͺ½ μμμ΄ μμΌλ©΄, νμμλ₯Ό μμ λ λ Έλκ° μλ μ리μ λ£μ ν, νμμ λ Έλμ μ€λ₯Έμͺ½ μμμ νμμ λ Έλμ μλ λΆλͺ¨μ μΌμͺ½ μμμΌλ‘ λ£λλ€.
μ΄μ§ νΈλ¦¬ μμ μ ν¨μ¨μ±
μ O(logN)
μ΄λ€.
+) μ λ ¬λ λ°°μ΄ μμ μ ν¨μ¨μ±μΈ O(N)μ λΉν΄ λ§€μ° μ’λ€.
μ°μ° | λ°°μ΄ | μ°κ²° 리μ€νΈ |
---|---|---|
μ½κΈ° | O(1) | O(N) |
κ²μ | O(N) | O(N) |
μ½μ | O(N)(λμμ νλ©΄ O(1)) | O(N)(μμμ νλ©΄ O(1)) |
μμ | O(N)(λμμ νλ©΄ O(1)) | O(N)(μμμ νλ©΄ O(1)) |
μ°μ° | μ λ ¬λ λ°°μ΄ | μ΄μ§ νΈλ¦¬ |
---|---|---|
μ½κΈ° | O(1) | O(N) |
κ²μ | O(logN) | O(logN) |
μ½μ | O(N) | O(logN) (μ λ ¬λ λ°μ΄ν° μ½μ μ O(N)) |
μμ | O(N) | O(logN) |
μλ£ κ΅¬μ‘° μνλ μλ£ κ΅¬μ‘°μμ λͺ¨λ λ
Έλλ₯Ό λ°©λ¬Έ
νλ κ³Όμ μ λ§νλ€.
νΈλ¦¬ μνμ ν¨μ¨μ±μ O(N)μ΄λ€.
[ μμ ]
'μ±
μ λͺ© 리μ€νΈλ₯Ό κ΄λ¦¬νλ μ ν리μΌμ΄μ
'μ μμ±νλ€κ³ νμ
λ€μκ³Ό κ°μ κΈ°λ₯μ ꡬνν΄μΌ νλ€
β 리μ€νΈκ° μμ£Ό λ°λμ§ μλλ€λ©΄, μ λ ¬λ λ°°μ΄μ μ΄μ©νλ κ²μ΄ μ’λ€ (μ½μ , μμ κ° μμ£Ό μ μΌμ΄λ¨, κ²μμ λΉ λ¦)
β κ·Έλ¬λ, 리μ€νΈκ° μμλ‘ λ°λλ€λ©΄, μ΄μ§ νΈλ¦¬
λ₯Ό μ΄μ©ν΄μΌ νλ€ (μ½μ
, μμ κ° μμ£Ό μΌμ΄λ¨)
β 2λ²κ³Ό 3λ² κΈ°λ₯μ μμ λ°°μ΄ μ΄μ§ νΈλ¦¬μ κ²μ, μ½μ , μμ μ½λλ‘ κ΅¬νμ΄ κ°λ₯νλ€.
β 1λ² κΈ°λ₯μ ꡬννκΈ° μν΄μλ μ΄μ§ νΈλ¦¬μ λͺ¨λ λ Έλλ₯Ό λ°©λ¬Έν΄μΌ νλ€. μ΄ κ²½μ°μλ μ€μ μνλ₯Ό μ΄μ©νλ€.
pp.259
PythonμΌλ‘ ꡬνλ μ½λ β JavaScriptλ‘ λ³ν
πββοΈ Q2. μ½λλ λ§€μ° κ°λ¨νμ§λ§ μ΄κ² μμ μ΄ν΄κ° μ κ°λ€. λν, μ΄μ§ νΈλ¦¬ μν μ€μμ μ΄ μ± μμ λ€λ£¬ κ²μ μ€μ μν νλμ΄λ€. μΌλ¨ μ΄μ§ νΈλ¦¬ μμ μ½λλΆν° μ΄ν΄ν ν μ΄μ§ νΈλ¦¬ μνμ λν΄μλ μΆκ°λ‘ λ 곡λΆν κ²!
// μ€μ μν β (μΌμͺ½ )
function traverse_and_print(node) {
if (node === null) {
return;
}
traverse_and_print(node.left_child);
console.log(node.value);
traverse_and_print(node.right_child);
}
νλ‘κ·Έλλ¨Έμ€ λ¬Έμ νμ΄
μ± κ³μ μ½κΈ°