일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보처리기사실기정리
- 자바의정석
- 타입스크립트
- 정보처리기사
- typescript
- 자바스크립트
- 자스코테
- 리액트
- 코딩테스트
- react
- 국비코딩
- ReactNative
- 정보처리기사정리
- 정보처리기사실기
- 오라클
- javascript
- VUE
- Oracle
- spring
- 정보처리기사실기요약
- 정보처리기사요약
- 평일코딩
- 이안의평일코딩
- Java의정석
- CSS
- 자바스크립트 코딩테스트
- php
- 스프링
- 국비IT
- 리액트네이티브
- Today
- Total
목록Study/JS Algorithm Rocket (12)
이안의 평일코딩
그래프를 탐색하는 방법에는 DFS(Depth First Search: 깊이 우선 탐색)과 BFS(Breadth First Search: 넓이 우선 탐색) 두 가지가 있다. DFS는 루트노드에서 시작해 다음 분기로 넘어가기 전 해당 분기를 완벽하게 탐색하는 방식을 말한다. BFS는 루트노드에서 시작해 인접한 노드를 먼저 탐색하는 방식으로 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법이다. 모든 노드를 방문하고자 하는 경우에는 DFS를 가까운 노드부터 탐색하기 위해서는 BFS를 사용한다. 검색 속도 자체는 BFS가 빠르지만 DFS가 더 간단하다. 검색 대상 그래프가 크거나 경로의 특징을 저장해둬야 하는 문제는 DFS를, 검색 대상의 규모가 크지 않고 최단거..
그래프는 인접행렬(adjacency matrix) 혹은 인접리스트(adjacency list)로 표현한다. 노드 갯수가 적을 때는 인접행렬로도 충분하지만 노드 수가 많아지면 인접리스트를 이용하는게 효율이 좋다. (시간복잡도가 훨씬 줄어든다.) 인접행렬은 node와 edge의 정보를 행렬로 표현하는 방법으로, edge와 상관없이 모든 node를 표현해야 하기 때문에 node의 수가 많을수록 메모리 사용량이 늘어난다. (node의 개수만큼 반복문을 돌아야 하기 때문) 인접리스트는 node와 edge의 정보를 리스트로 표현하는 방법으로, 연결된 것만 표시하므로 인접행렬에 비해 간단하다. // 인접행렬 function solution(n, arr) { let answer = 0; let graph = Array..
방향 그래프(directed graph)와 무방향 그래프(undirected graph)는 이동방향의 유무 차이로 구분한다. 방향 그래프는 이동할 수 있는 방향이 정해져있고 무방향은 명칭대로 방향이 없어 양쪽 다 가능하다. // 방향 그래프 let arr = [[1, 2],[1, 3],[1, 4],[2, 1],[2, 3],[2, 5],[3, 4],[4, 2],[4, 5]]; let graph = Array.from(Array(n + 1), () => Array(n + 1).fill(0)); for (let [a, b] of arr) { // arr 값 1개 씩 탐색 graph[a][b] = 1; // 방향 그래프에서 graph arr 에 1로 체크 } // 1로 체크되어 있으면 갈 수 있는 방향인 것 /..
0. 이진트리(binary tree)란 각각의 노드가 최대 두개의 자식 노드를 가지는 트리 자료 구조로, 자식 노드를 각각 왼쪽 자식 노드와 오른쪽 자식 노드라고 한다. (참고로 트리 자료 구조란 노드들이 나무 가지처럼 연결된 비선형 계층적 자료구조를 말한다.) 1. 위 그림에서 각 점은 node 혹은 vertex라고 말하고 두 점을 잇는 선을 edge라고 한다. 그래프는 V(vertex 혹은 node), E(edge)의 집합이다. 따라서 G(V, E)로 표현하기도 한다.
재귀함수(Recursion) 자기자신을 호출하는 것을 재귀함수라 하는데, 반복문과 동일하지만 조합할 때 사용할 수있다. return하면 반환한다는 의미도 있지만 함수에서는 종료를 의미하기도 한다. function solution(n){ function DFS(Level){ if(Level==0) return; else{ console.log(Level); // 3 2 1 DFS(Level-1); console.log(Level); // 1 2 3 } } DFS(n) } solution(3); console을 찍었을 때 왜 반대로 찍힐까? 재귀함수 이후에 찍은 console은 stack에 쌓여있다가 복귀(pop)를해서 가장 늦게 들어온 메서드부터 console을 출력한다. Stack 자료구조와 같이 FIL..
문제 게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 ..
* 스터디 방식 0. 알고리즘 문제를 미리 배부한 뒤 각자 풉니다. (예습) 1. ZOOM을 통해 돌아가며 풀이를 발표합니다. (스터디) 2. 정답을 배부합니다. 3. 깃허브에 풀이 또는 오답노트를 정리해서 게시합니다. (복습) 스터디 방식에 수정, 추가할 것이 있으면 스터디 시작 전 같이 결정하겠습니다. * 비용 (조건) 비용은 월 4만원이며, 한 달 8회 기준으로 1일 당 5천원 씩 차감되며 스터디 완료 후 페이백 해드립니다. 중도하차 시에는 전액 돌려받으실 수 없다는 점 꼭 확인 부탁드립니다. 개인 이익을 취할 목적이 아닌, 벌금과 같은 스터디 자극용으로 이용할 계획이며 마지막 주 차에 남은 인원분으로 금액을 나누어 지급합니다. (자바스크립트 다이버스터디에서도 투명하게 3개월 동안 관리한 이력이 있..