문제 1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력합니다. 풀이 function solution(n, m) { let answer = []; let tmp = Array.from({ length: m }, () => 0); function DFS(L) { if (L === m) { answer.push(tmp.slice()); } else { for (let i = 1; i
문제 이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩 니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.) 풀이 function solution(m, ps, pt) { let answer = Number.MIN_SAFE_INTEGER; function DFS(L, sum, time) { if (time > m) return; if (L === ps.length) { answer = Math.max(answer, sum); } else { DFS(L + 1, su..
문제 철수는 그의 바둑이들을 데리고 시장에 가려고 한다. 그런데 그의 트럭은 C킬로그램 넘게 태 울수가 없다. 철수는 C를 넘지 않으면서 그의 바둑이들을 가장 무겁게 태우고 싶다. N마리의 바둑이와 각 바둑이의 무게 W가 주어지면, 철수가 트럭에 태울 수 있는 가장 무거운 무게를 구하는 프로그램을 작성하세요. 풀이 function solution(c, arr) { let answer = Number.MIN_SAFE_INTEGER; let n = arr.length; function DFS(L, sum) { if (L === n) { if (sum answer) { answer = sum; } else return; } else { DFS(L + 1, sum + arr[L]); DF..
문제 N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두 개의 부분집합으로 나누었을 때 두 부분집합의 원소의 합이 서로 같은 경우가 존재하면 “YES"를 출력하고, 그렇지 않으면 ”NO"를 출력하는 프로그램을 작성하세요. 둘로 나뉘는 두 부분집합은 서로소 집합(Disjoint Set)이며, 두 부분집합을 합하면 입력으로 주 어진 원래의 집합이 되어야 합니다. 예를 들어 {1, 3, 5, 6, 7, 10}이 입력되면 {1, 3, 5, 7} = {6, 10} 으로 두 부분집합의 합이 16으로 같은 경우가 존재하는 것을 알 수 있다. 풀이 function solution(arr) { let answer = "NO", flag = 0; let total = arr.reduce((sum, item) =>..
문제 자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램 을 작성하세요. 풀이 function solution(n) { let answer = []; let ch = Array.from({ length: n + 1 }, () => 0); console.log(ch); function DFS(V) { if (V === n + 1) { let tmp = ""; console.log(ch); for (let i = 1; i 0) answer.push(tmp.trim()); console.log(tmp); } else { ch[V] = 1; DFS(V + 1); ch[V] = 0; DFS(V + 1); } } DFS(1); return answer; } console.lo..
이진트리란 이진트리는 모든 노드가 0개 또는 2개의 자식 노드를 갖는 트리입니다. 모든 순회는 왼쪽 , 오른쪽을 기준으로 설명됩니다. 전위 순회 부모 >> 왼쪽 >> 오른쪽 출력을 의미합니다. 중위 순회 왼쪽 >> 부모 >> 오른쪽 출력을 의미합니다. 후위 순회 왼쪽 >> 오른쪽 >> 부모 출력을 의미합니다. 예시 문제 이진트리 순회(깊이 우선 탐색) 아래 그림과 같은 이진트리를 전위 순회와 후위 순회를 연습해보세요. 풀이 function solution(n) { let answer = ""; function DFS(V) { if (V > 7) { return; } else { answer += V; DFS(V * 2); DFS(V * 2 + 1); console.log(V); } } DFS(n); re..
문제 10진수 N이 입력되면 2진수로 변환하여 출력하는 프로그램을 작성하세요. 단 재귀 함수를 이용해서 출력해야 합니다. 풀이 function solution(n) { let answer = ""; function DFS(L) { if (L === 0) return; else { console.log(L); DFS(Math.floor(L / 2)); answer += L % 2; } } DFS(n); return answer; } console.log(solution(11)); 저번에 스택과 재귀 함수에 대해 배웠는데 이를 응용해서 문제를 푸는 중에 있습니다.
재귀 함수란? 함수가 직접 또는 간접적으로 자신을 호출하는 프로세스를 재귀함수라고 합니다 재귀 알고리즘을 이용하면 복잡한 문제들도 간단하게 해결할 수 있습니다 반복문도 마찬가지지만 재귀함수도 종료지점을 제대로 생각하지 않고 구현을 하면 스택 오버 플로우가 발생할 수 있으니 항시 주의해서 구현을 해줘야합니다. 재귀 함수 예제 function solution(n) { function DFS(L) { if (L === 0) return; else { console.log(L); DFS(L - 1); } } DFS(n); } console.log(solution(3)); 반대로 콘솔로그를 DFS 밑에 위치시키게 된다면 function solution(n) { function DFS(L) { if (L === 0..
- Total
- Today
- Yesterday
- createPortal
- import/order
- 아차산
- env
- 노개북
- WSL2
- 원티드
- nodejs
- error
- 윤성우 열혈C프로그래밍
- React
- Storybook
- 초보
- 노마드코더
- 위코드
- TopLayer
- NextRequest
- electron
- nextjs
- jest
- 프리온보딩
- NextApiRequest
- 북클럽
- C언어
- CLASS
- 스토리 북
- 우아한테크코스
- javascript
- 프론트앤드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |