diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..45c0d15 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. + // 기존 특성에 대한 설명을 보려면 가리킵니다. + // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "localhost에 대해 Chrome 시작", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git "a/Moonjonghoo/graph/DFS\354\231\200_BFS.js" "b/Moonjonghoo/graph/DFS\354\231\200_BFS.js" new file mode 100644 index 0000000..c59cc08 --- /dev/null +++ "b/Moonjonghoo/graph/DFS\354\231\200_BFS.js" @@ -0,0 +1,35 @@ +const fs = require("fs"); +const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); + +const [N, M, V] = input[0].split(" ").map(Number); +const edges = input.slice(1).map((line) => line.split(" ").map(Number)); + +const graph = Array.from({ length: N + 1 }, () => []); +edges.forEach(([a, b]) => { + graph[a].push(b); + graph[b].push(a); +}); +graph.forEach((node) => node.sort((a, b) => a - b)); + +const dfs = (v, visited = []) => { + if (visited.includes(v)) return; + visited.push(v); + graph[v].forEach((n) => dfs(n, visited)); + return visited; +}; + +const bfs = (v) => { + let queue = [v], + visited = []; + while (queue.length) { + let node = queue.shift(); + if (!visited.includes(node)) { + visited.push(node); + queue.push(...graph[node].filter((n) => !visited.includes(n))); + } + } + return visited; +}; + +console.log(dfs(V, []).join(" ")); +console.log(bfs(V).join(" ")); diff --git "a/Moonjonghoo/graph/\352\262\214\354\236\204_\353\247\265_\354\265\234\353\213\250\352\261\260\353\246\254.js" "b/Moonjonghoo/graph/\352\262\214\354\236\204_\353\247\265_\354\265\234\353\213\250\352\261\260\353\246\254.js" new file mode 100644 index 0000000..4ba0cdb --- /dev/null +++ "b/Moonjonghoo/graph/\352\262\214\354\236\204_\353\247\265_\354\265\234\353\213\250\352\261\260\353\246\254.js" @@ -0,0 +1,34 @@ +function solution(maps) { + let n = maps.length; + let m = maps[0].length; + let answer = 1; + let visited = maps; + const dx = [-1, 1, 0, 0]; + const dy = [0, 0, -1, 1]; + let queue = []; + queue.push([0, 0]); + visited[0][0] = 0; + + while (queue.length > 0) { + let size = queue.length; + + for (let i = 0; i < size; i++) { + let [x, y] = queue.shift(); + + for (let j = 0; j < 4; j++) { + let nx = x + dx[j]; + let ny = y + dy[j]; + + if (nx >= 0 && nx < n && ny >= 0 && ny < m && visited[nx][ny] === 1) { + if (nx == n - 1 && ny == m - 1) { + return ++answer; + } + queue.push([nx, ny]); + visited[nx][ny] = 0; + } + } + } + answer++; + } + return -1; +} diff --git "a/Moonjonghoo/graph/\354\240\204\353\240\245\353\247\235\354\235\204_\353\221\230\353\241\234_\353\202\230\353\210\204\352\270\260.js" "b/Moonjonghoo/graph/\354\240\204\353\240\245\353\247\235\354\235\204_\353\221\230\353\241\234_\353\202\230\353\210\204\352\270\260.js" new file mode 100644 index 0000000..85b5a9a --- /dev/null +++ "b/Moonjonghoo/graph/\354\240\204\353\240\245\353\247\235\354\235\204_\353\221\230\353\241\234_\353\202\230\353\210\204\352\270\260.js" @@ -0,0 +1,48 @@ +function solution(n, wires) { + let answer = Infinity; + + function dfs(graph, start, visited) { + visited[start] = true; + let count = 1; + + for (let i = 0; i < graph[start].length; i++) { + const neighbor = graph[start][i]; + if (!visited[neighbor]) { + count += dfs(graph, neighbor, visited); + } + } + + return count; + } + + for (let i = 0; i < n - 1; i++) { + const graph = Array(n) + .fill(null) + .map(() => []); + for (let j = 0; j < n - 1; j++) { + if (i === j) continue; + const [a, b] = wires[j]; + graph[a - 1].push(b - 1); + graph[b - 1].push(a - 1); + } + + const visited = Array(n).fill(false); + let count1 = 0; + let count2 = 0; + + for (let j = 0; j < n; j++) { + if (!visited[j]) { + if (count1 === 0) { + count1 = dfs(graph, j, visited); + } else { + count2 = dfs(graph, j, visited); + } + } + } + + const diff = Math.abs(count1 - count2); + answer = Math.min(answer, diff); + } + + return answer; +} diff --git "a/Moonjonghoo/graph/\355\203\200\352\262\237_\353\204\230\353\262\204.js" "b/Moonjonghoo/graph/\355\203\200\352\262\237_\353\204\230\353\262\204.js" new file mode 100644 index 0000000..48d06c6 --- /dev/null +++ "b/Moonjonghoo/graph/\355\203\200\352\262\237_\353\204\230\353\262\204.js" @@ -0,0 +1,25 @@ +function solution(numbers, target) { + let n = numbers.length; + let check = Array.from({ length: n }, () => false); + let answer = 0; + function DFS(v) { + if (v === n) { + let sum = 0; + for (let i = 0; i < n; i++) { + if (check[i] === true) { + sum += numbers[i]; + } else if (check[i] === false) { + sum -= numbers[i]; + } + } + if (sum === target) answer++; + } else { + check[v] = true; + DFS(v + 1); + check[v] = false; + DFS(v + 1); + } + } + DFS(0); + return answer; +} diff --git "a/Moonjonghoo/hash/A\353\241\234 B\353\247\214\353\223\244\352\270\260.js" "b/Moonjonghoo/hash/A\353\241\234 B\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..e9f1e33 --- /dev/null +++ "b/Moonjonghoo/hash/A\353\241\234 B\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,28 @@ +function solution(before, after) { + let hash1 = new Map(); + let hash2 = new Map(); + + for (let i = 0; i < before.length; i++) { + hash1.set(before[i], (hash1.get(before[i]) || 0) + 1); + hash2.set(after[i], (hash2.get(after[i]) || 0) + 1); + } + + // Map 비교 함수 + function compareMaps(map1, map2) { + if (map1.size !== map2.size) return false; // 크기 비교 + for (let [key, value] of map1) { + if (map2.get(key) !== value) return false; // 키-값 비교 + } + return true; + } + + // 비교 결과 반환 + return compareMaps(hash1, hash2) ? 1 : 0; +} + +console.log(solution("olleh", "hello")); // 1 +console.log(solution("apple", "ppale")); // 0 + +console.log(solution("olleh", "hello")); + +//바꿀수있다는것은 구성 요소의 종류와 개수가 같으면됩니다. diff --git "a/Moonjonghoo/hash/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260.js" "b/Moonjonghoo/hash/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260.js" new file mode 100644 index 0000000..7648303 --- /dev/null +++ "b/Moonjonghoo/hash/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260.js" @@ -0,0 +1,10 @@ +function solution(score) { + // 각 학생의 평균 점수 계산 + const averages = score.map(([eng, math]) => (eng + math) / 2); + + // 평균 점수를 내림차순으로 정렬하여 등수 매기기 + const sorted = [...averages].sort((a, b) => b - a); + + // 원래 평균 점수 배열의 각 값이 정렬된 배열에서 몇 번째 순위인지 계산 + return averages.map((avg) => sorted.indexOf(avg) + 1); +} diff --git "a/Moonjonghoo/hash/\353\252\250\354\212\244\353\266\200\355\230\270(1).js" "b/Moonjonghoo/hash/\353\252\250\354\212\244\353\266\200\355\230\270(1).js" new file mode 100644 index 0000000..a66a7ee --- /dev/null +++ "b/Moonjonghoo/hash/\353\252\250\354\212\244\353\266\200\355\230\270(1).js" @@ -0,0 +1,41 @@ +function solution(letter) { + var answer = ""; + let morse = { + ".-": "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", + }; + + let arr = letter.split(" "); + for (let i = 0; i < arr.length; i++) { + if (morse.hasOwnProperty(arr[i])) { + answer += morse[arr[i]]; + } + } + return answer; +} + +console.log(solution(".... . .-.. .-.. ---")); diff --git "a/Moonjonghoo/hash/\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" "b/Moonjonghoo/hash/\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" new file mode 100644 index 0000000..e69de29 diff --git "a/Moonjonghoo/hash/\354\247\204\353\243\214\354\210\234\354\204\234.js" "b/Moonjonghoo/hash/\354\247\204\353\243\214\354\210\234\354\204\234.js" new file mode 100644 index 0000000..5a55b55 --- /dev/null +++ "b/Moonjonghoo/hash/\354\247\204\353\243\214\354\210\234\354\204\234.js" @@ -0,0 +1,16 @@ +function solution(emergency) { + var answer = []; + let newarr = emergency.slice(); + newarr.sort((a, b) => b - a); + let map = new Map(); + for (let i = 0; i < newarr.length; i++) { + map.set(newarr[i], i + 1); + } + for (let i = 0; i < emergency.length; i++) { + let number = map.get(emergency[i]); + answer.push(number); + } + return answer; +} + +console.log(solution([3, 76, 24])); diff --git "a/Moonjonghoo/queue/\353\241\234\352\267\270\354\235\270_\354\204\261\352\263\265.js" "b/Moonjonghoo/queue/\353\241\234\352\267\270\354\235\270_\354\204\261\352\263\265.js" new file mode 100644 index 0000000..fa29f76 --- /dev/null +++ "b/Moonjonghoo/queue/\353\241\234\352\267\270\354\235\270_\354\204\261\352\263\265.js" @@ -0,0 +1,11 @@ +function solution(id_pw, db) { + const [id, pw] = id_pw; + + for (const [dbId, dbPw] of db) { + if (id === dbId) { + return pw === dbPw ? "login" : "wrong pw"; + } + } + + return "fail"; +} diff --git "a/Moonjonghoo/queue/\354\210\234\354\204\234\354\214\215\354\235\230_\352\260\234\354\210\230.js" "b/Moonjonghoo/queue/\354\210\234\354\204\234\354\214\215\354\235\230_\352\260\234\354\210\230.js" new file mode 100644 index 0000000..026633e --- /dev/null +++ "b/Moonjonghoo/queue/\354\210\234\354\204\234\354\214\215\354\235\230_\352\260\234\354\210\230.js" @@ -0,0 +1,14 @@ +function solution(n) { + let count = 0; + + for (let i = 1; i <= Math.sqrt(n); i++) { + if (n % i === 0) { + count++; // i가 약수 + if (i !== n / i) { + count++; // i가 n의 제곱근이 아니면 나머지 짝도 추가 + } + } + } + + return count; +} diff --git "a/Moonjonghoo/queue/\354\240\220\354\235\230_\354\234\204\354\271\230_\352\265\254\355\225\230\352\270\260.js" "b/Moonjonghoo/queue/\354\240\220\354\235\230_\354\234\204\354\271\230_\352\265\254\355\225\230\352\270\260.js" new file mode 100644 index 0000000..e05495c --- /dev/null +++ "b/Moonjonghoo/queue/\354\240\220\354\235\230_\354\234\204\354\271\230_\352\265\254\355\225\230\352\270\260.js" @@ -0,0 +1,8 @@ +function solution(dot) { + const [x, y] = dot; + + if (x > 0 && y > 0) return 1; // 1사분면 + if (x < 0 && y > 0) return 2; // 2사분면 + if (x < 0 && y < 0) return 3; // 3사분면 + if (x > 0 && y < 0) return 4; // 4사분면 +} diff --git "a/Moonjonghoo/queue/\355\212\271\354\235\264\355\225\234_\354\240\225\353\240\254.js" "b/Moonjonghoo/queue/\355\212\271\354\235\264\355\225\234_\354\240\225\353\240\254.js" new file mode 100644 index 0000000..23ce50a --- /dev/null +++ "b/Moonjonghoo/queue/\355\212\271\354\235\264\355\225\234_\354\240\225\353\240\254.js" @@ -0,0 +1,11 @@ +function solution(numlist, n) { + return numlist.sort((a, b) => { + const diffA = Math.abs(a - n); + const diffB = Math.abs(b - n); + + if (diffA === diffB) { + return b - a; + } + return diffA - diffB; + }); +} diff --git "a/Moonjonghoo/queue/\355\224\204\353\241\234\354\204\270\354\212\244.js" "b/Moonjonghoo/queue/\355\224\204\353\241\234\354\204\270\354\212\244.js" new file mode 100644 index 0000000..2289304 --- /dev/null +++ "b/Moonjonghoo/queue/\355\224\204\353\241\234\354\204\270\354\212\244.js" @@ -0,0 +1,17 @@ +function solution(priorities, location) { + let order = 0; + + while (priorities.length > 0) { + const current = priorities.shift(); + if (priorities.some((priority) => priority > current)) { + priorities.push(current); + location = location === 0 ? priorities.length - 1 : location - 1; + } else { + order++; + if (location === 0) { + return order; // 목표 프로세스가 실행되었을 때 순서를 반환 + } + location--; + } + } +} diff --git a/Moonjonghoo/set/Contains_Duplicate.js b/Moonjonghoo/set/Contains_Duplicate.js new file mode 100644 index 0000000..822ccf9 --- /dev/null +++ b/Moonjonghoo/set/Contains_Duplicate.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + let hash = new Set(); + for (let i = 0; i < nums.length; i++) { + if (!hash.has(nums[i])) { + hash.add(nums[i]); + } + } + if (hash.size !== nums.length) return true; + else { + return false; + } +}; diff --git a/Moonjonghoo/set/Intersection_of_two_arrays.js b/Moonjonghoo/set/Intersection_of_two_arrays.js new file mode 100644 index 0000000..a8f8613 --- /dev/null +++ b/Moonjonghoo/set/Intersection_of_two_arrays.js @@ -0,0 +1,12 @@ +/** + * @param {number[]} nums1 + * @param {number[]} nums2 + * @return {number[]} + */ +var intersection = function (nums1, nums2) { + let hash = new Set(nums2); + const intersectionSet = new Set([...nums1].filter((x) => hash.has(x))); + return [...intersectionSet]; +}; + +console.log(intersection([1, 2, 2, 1], [2, 2])); diff --git a/Moonjonghoo/set/count_the_number_of_consistent_strings.js b/Moonjonghoo/set/count_the_number_of_consistent_strings.js new file mode 100644 index 0000000..35b1315 --- /dev/null +++ b/Moonjonghoo/set/count_the_number_of_consistent_strings.js @@ -0,0 +1,21 @@ +/** + * @param {string} allowed + * @param {string[]} words + * @return {number} + */ +var countConsistentStrings = function (allowed, words) { + let hash = new Set(allowed.split("")); + let answer = words.length; + console.log(hash); + for (let i = 0; i < words.length; i++) { + for (let j = 0; j < words[i].length; j++) { + if (!hash.has(words[i][j])) { + answer--; + break; + } + } + } + return answer; +}; + +console.log(countConsistentStrings("ab", ["ad", "bd", "aaab", "baa", "badab"])); diff --git a/Moonjonghoo/set/design_hashset.js b/Moonjonghoo/set/design_hashset.js new file mode 100644 index 0000000..e7881a6 --- /dev/null +++ b/Moonjonghoo/set/design_hashset.js @@ -0,0 +1,40 @@ +var MyHashSet = function () { + this.data = []; +}; + +/** + * @param {number} key + * @return {void} + */ +MyHashSet.prototype.add = function (key) { + if (!this.data.includes(key)) { + this.data.push(key); + } +}; + +/** + * @param {number} key + * @return {void} + */ +MyHashSet.prototype.remove = function (key) { + this.data = this.data.filter((x) => x !== key); +}; + +/** + * @param {number} key + * @return {boolean} + */ +MyHashSet.prototype.contains = function (key) { + if (this.data.includes(key)) { + return true; + } else { + return false; + } +}; + +let hash = new MyHashSet(); +hash.add(2); +console.log(hash); +console.log(hash.contains(2)); +hash.remove(2); +console.log(hash); diff --git a/Moonjonghoo/set/longest_consecutive_sequence.js b/Moonjonghoo/set/longest_consecutive_sequence.js new file mode 100644 index 0000000..d1c1725 --- /dev/null +++ b/Moonjonghoo/set/longest_consecutive_sequence.js @@ -0,0 +1,23 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + nums.sort((a, b) => a - b); + let count = 1; + let answer = 0; + let max = 0; + console.log(nums); + while (true) { + if (max === nums.length) return answer; + if (nums[max + 1] - 1 === nums[max]) { + max++; + count++; + } else { + max++; + answer = Math.max(answer, count); + } + } +}; + +console.log(longestConsecutive([9, 1, 4, 7, 3, -1, 0, 5, 8, -1, 6])); diff --git a/Moonjonghoo/set/repeated_dna_sequences.js b/Moonjonghoo/set/repeated_dna_sequences.js new file mode 100644 index 0000000..36d8edc --- /dev/null +++ b/Moonjonghoo/set/repeated_dna_sequences.js @@ -0,0 +1,22 @@ +/** + * @param {string} s + * @return {string[]} + */ +var findRepeatedDnaSequences = function (s) { + let hash = new Set(); + let answer = []; + for (let i = 0; i < s.length; i++) { + let dna = s.substring(i, i + 10); + + if (!hash.has(dna) && dna.length === 10) { + hash.add(dna); + } else if (hash.has(dna) && dna.length === 10) { + answer.push(dna); + } + } + let newhash = new Set(answer); + + return [...newhash]; +}; + +console.log(findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT")); diff --git "a/Moonjonghoo/set/\353\254\264\354\236\221\354\234\204\353\241\234_K\352\260\234\354\235\230_\354\210\230_\353\275\221\352\270\260.js" "b/Moonjonghoo/set/\353\254\264\354\236\221\354\234\204\353\241\234_K\352\260\234\354\235\230_\354\210\230_\353\275\221\352\270\260.js" new file mode 100644 index 0000000..2c5ec77 --- /dev/null +++ "b/Moonjonghoo/set/\353\254\264\354\236\221\354\234\204\353\241\234_K\352\260\234\354\235\230_\354\210\230_\353\275\221\352\270\260.js" @@ -0,0 +1,22 @@ +function solution(arr, k) { + var answer = []; + for (let i = 0; i < arr.length; i++) { + if (!answer.includes(arr[i])) { + answer.push(arr[i]); + } + } + + if (answer.length > k) { + return answer.slice(0, k); + } else if (answer.length < k) { + while (answer.length !== k) { + answer.push(-1); + } + return answer; + } else { + return answer; + } +} + +console.log(solution([0, 1, 1, 2, 2, 3], 5)); +console.log(solution([0, 1, 1, 1, 1], 4)); diff --git "a/Moonjonghoo/set/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264.js" "b/Moonjonghoo/set/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264.js" new file mode 100644 index 0000000..5ec8197 --- /dev/null +++ "b/Moonjonghoo/set/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264.js" @@ -0,0 +1,17 @@ +function solution(n) { + var answer = []; + let division = 2; + while (n !== 1) { + if (n % division === 0) { + n = n / division; + answer.push(division); + } else { + division++; + } + } + return Array.from(new Set(answer)); +} + +console.log(solution(12)); // 기대값: [2, 3] +console.log(solution(17)); // 기대값: [17] +console.log(solution(420)); // 기대값: [2, 3, 5, 7] diff --git "a/Moonjonghoo/set/\354\244\221\353\263\265\353\220\234_\353\254\270\354\236\220_\354\240\234\352\261\260.js" "b/Moonjonghoo/set/\354\244\221\353\263\265\353\220\234_\353\254\270\354\236\220_\354\240\234\352\261\260.js" new file mode 100644 index 0000000..bc59693 --- /dev/null +++ "b/Moonjonghoo/set/\354\244\221\353\263\265\353\220\234_\353\254\270\354\236\220_\354\240\234\352\261\260.js" @@ -0,0 +1,14 @@ +function solution(my_string) { + var answer = ""; + let set = []; + for (let i = 0; i < my_string.length; i++) { + if (!set.includes(my_string[i])) { + set.push(my_string[i]); + answer += my_string[i]; + } + } + return answer; +} + +console.log(solution("people")); // 기대값: "peol" +console.log(solution("We are the world")); // 기대값: "We arthwold" diff --git "a/Moonjonghoo/set/\355\225\234_\353\262\210\353\247\214_\353\223\261\354\236\245\355\225\234_\353\254\270\354\236\220.js" "b/Moonjonghoo/set/\355\225\234_\353\262\210\353\247\214_\353\223\261\354\236\245\355\225\234_\353\254\270\354\236\220.js" new file mode 100644 index 0000000..71eb990 --- /dev/null +++ "b/Moonjonghoo/set/\355\225\234_\353\262\210\353\247\214_\353\223\261\354\236\245\355\225\234_\353\254\270\354\236\220.js" @@ -0,0 +1,44 @@ +// function solution(s) { +// var answer = ""; +// let arr = []; +// for (let i = 0; i < s.length; i++) { +// if (!arr.includes(s[i])) { +// arr.push(s[i]); +// } else { +// arr = arr.filter((e) => e !== s[i]); +// } +// } + +// answer = arr.sort().join(""); +// return answer; +// } + +// console.log(solution("abcabcadc")); // 기대값: "d" +// console.log(solution("abdc")); // 기대값: "abdc" +// console.log(solution("hello")); // 기대값: "eho" +// console.log(solution("hlelo")); + +function solution(s) { + var answer = ""; + let arr = []; + let hash = new Map(); + for (let i = 0; i < s.length; i++) { + if (!hash.get(s[i])) { + hash.set(s[i], 1); + } else { + hash.set(s[i], hash.get(s[i]) + 1); + } + } + for (let [key, value] of hash) { + if (value === 1) { + arr.push(key); + } + } + answer = arr.sort().join(""); + if (arr.length === 0) return ""; + return answer; +} + +console.log(solution("abcabcadc")); // 기대값: "d" +console.log(solution("abdc")); // 기대값: "abdc" +console.log(solution("hello")); // 기대값: "eho" diff --git a/Moonjonghoo/tree/Invert_Binary_tree.js b/Moonjonghoo/tree/Invert_Binary_tree.js new file mode 100644 index 0000000..d5a90fd --- /dev/null +++ b/Moonjonghoo/tree/Invert_Binary_tree.js @@ -0,0 +1,16 @@ +var invertTree = function (root) { + if (root === null) { + return null; + } + + // 왼쪽과 오른쪽 자식 노드를 교환 + const temp = root.left; + root.left = root.right; + root.right = temp; + + // 재귀적으로 자식 노드들을 반전 + invertTree(root.left); + invertTree(root.right); + + return root; +}; diff --git a/Moonjonghoo/tree/binary_tree_inorder_traversal.js b/Moonjonghoo/tree/binary_tree_inorder_traversal.js new file mode 100644 index 0000000..bd8c1ae --- /dev/null +++ b/Moonjonghoo/tree/binary_tree_inorder_traversal.js @@ -0,0 +1,13 @@ +var inorderTraversal = function (root) { + const result = []; + + const traverse = (node) => { + if (node === null) return; + traverse(node.left); // 왼쪽 서브트리 방문 + result.push(node.val); // 현재 노드 방문 + traverse(node.right); // 오른쪽 서브트리 방문 + }; + + traverse(root); + return result; +}; diff --git a/Moonjonghoo/tree/maximum_depth_of_binary_tree.js b/Moonjonghoo/tree/maximum_depth_of_binary_tree.js new file mode 100644 index 0000000..a268ad9 --- /dev/null +++ b/Moonjonghoo/tree/maximum_depth_of_binary_tree.js @@ -0,0 +1,18 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {number} + */ +var maxDepth = function (root) { + if (!root) return 0; + return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; +}; + +console.log(maxDepth); diff --git a/Moonjonghoo/tree/same_tree.js b/Moonjonghoo/tree/same_tree.js new file mode 100644 index 0000000..cb4c6fc --- /dev/null +++ b/Moonjonghoo/tree/same_tree.js @@ -0,0 +1,16 @@ +var isSameTree = function (p, q) { + // 두 노드가 모두 null인 경우 + if (p === null && q === null) { + return true; + } + // 한 노드만 null인 경우 + if (p === null || q === null) { + return false; + } + // 노드의 값이 다른 경우 + if (p.val !== q.val) { + return false; + } + // 왼쪽 및 오른쪽 서브트리를 재귀적으로 비교 + return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); +}; diff --git a/example.txt b/example.txt new file mode 100644 index 0000000..f3e6a0c --- /dev/null +++ b/example.txt @@ -0,0 +1,6 @@ +4 5 1 +1 2 +1 3 +1 4 +2 4 +3 4 \ No newline at end of file