Trip to Algorithm(7)
-
[Algorithm] 바둑이 승차(이진트리 DFS)
주어진 배열값 들의 부분합들중 limit을 넘지 않는 최대합을 구하는 것으로 오타 때문에 한참 걸렸다. 이진트리 완전 탐색에 조금씩 익숙해지는 중. const input = require("fs") .readFileSync("example.txt") .toString() .replaceAll("\r", "") .split("\n"); let [limit, n] = input[0].split(" "); limit = Number(limit) n = Number(n) let dogs = []; for (let i = 1; i { if (num == n + 1) { let weight = 0; for (let i = 1; i
2023.10.11 -
[Algorithm] 합이 같은 부분집합(이진트리 DFS)
이진 트리에 익숙해지기 위한 반복 문제이다. 서로소인 부분 합 2개의 합이 같은 지 확인하라고 한다. const input = require("fs").readFileSync("example.txt").toString().split("\n"); const n = Number(input[0]); const arr = input[1].split(" ").map(Number); arr.unshift(0); const sum = arr.reduce((a, b) => a + b, 0); let check = new Array(n + 1).fill(0); let answer = "NO"; const DFS = (num) => { if (num == n + 1) { let matched = []; for (let i..
2023.10.10 -
[Algorithm] 부분집합 구하기(이진트리 DFS)
주어지는 숫자의 부분집합을 구하라는 문제이다. 만약 3이 주어지면 3, 2, 1, (1,2) ... 뭐 이런식이다. const input = require("fs").readFileSync("example.txt").toString(); const n = Number(input); const visited = new Array(n + 1).fill(0); let ans = []; const DFS = (num) => { if (num === n + 1) { let k = []; for (let i = 1; i
2023.10.10 -
[Algorithm] 이진트리순회(DFS: 깊이우선탐색)
function solution(v) { let answer; function DFS(v) { if (v > 7) { return; } else { console.log(v); DFS(v * 2); DFS(v * 2 + 1); } } DFS(v); return answer; } solution(1); // 콘솔을 어디 두냐에 따라서 순회 방향이 달라진다. // 전위순회 출력 1245367 // 중위순회 출력 4251637 // 후위순회 출력 4526731 스택에 어떻게 진행되는지 그려보면 그림이 그려진다.
2023.10.09 -
[Algorithm] 이진수 출력(재귀)
이전 문제와 같다. 재귀함수에 대해 확실히 이해시키고자 하신 듯 const input = require("fs").readFileSync("example.txt").toString(); const n = Number(input); let ans = ""; const two = (num) => { let k = Math.floor(num / 2); if (k > 0) { ans += num % 2; two(k); } else { ans += num % 2; return; } }; two(n); console.log(ans);
2023.10.09 -
[Algorithm] 재귀함수와 스택프레임
나는 자바스크립트로 코딩테스트를 푼다. 파이썬이나 C++에 비해서 풀기 불편하다고 하지만 프론트엔드에게는 자바스크립트만큼 중요한 언어는 없기 때문에 파이썬으로 초기에 풀었다가 자바스크립트로 변경하였다. 1년 전까지?만해도 프론트도 그냥 파이썬으로 푸는 사람들이 많았는데 우아한 코스인가? 거기서 코테를 js로 제한해서 뭔가 흐름이 크게 바뀐 듯하다. 여튼 돌아와서 간단한 코딩 문제들은 고차함수 혹은 배열 메서드로 해결이 가능하지만 입문을 막 떼고 조금만 난이도를 올리면 그 이상의 지식을 요구한다. 백준에서는 브론즈와 낮은 실버 문제를 풀며 실버 4까지 왔지만 처음으로 벽을 느낀게 백트래킹이었다. 그 다음 DFS, BFS로 넘어가면서 아 이거 그냥 머리로 풀면 안되겠다는 생각이 들었다. 물론 알고리즘 도움을..
2023.10.09