목록분류 전체보기
Step-by-Step
탐욕 알고리즘(Greedy Algorithm) 최적해를 구하는 데에 사용되는 근사적인 방법 여러 경우 중 하나를 결정해야 할 때마다 그때마다 최적의 방법을 선택하여 최종 해답에 도달하는 방법 매 순간마다 최적의 선택을 하더라도 최종적 해답이 최적이라는 보장은 없다 (각 순간의 지역적 선택이 최적일지는 몰라도 전역적으로 봤을때는 최적의 선택이 아닐 수 있다) 탐욕 알고리즘 적절한 사용 탐욕 알고리즘은 아래 두 경우에 사용할 때 좋은 해결방안이 된다 탐욕 선택 속성(Greedy Choice Property) : 매 순간의 탐욕적인 선택이 최종 답의 최적의 선택이 됨 최적 부분 구조(Optimal Substructure) : 부분 문제를 최적화하는 것이 전체를 최적화하는 것임 즉 탐욕 알고리즘을 사용할 때는 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lX9E8/btrc6RdCiY1/SsRDpm1JjiLWjd1z4JttK0/img.png)
동적계획법(Dynamic Programming : DP) 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계기법 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법 최적부분구조와 같은 문제에서 효과를 발휘함 ★ 최적 부분 구조(Optimal Substructure) 문제의 최적 해결 방법은 부분 문제에 대한 최적 해결 방법으로 구성 동적계획법 사용 동적 계획법을 적용하기 위한 예시를 가져왔다 여기서 조건은 f(a,b) = f(a-1,b) + f(a,b-1) (a,b>=1) f(0,0) = 1 자연수 n에 대하여 f(n,0)=f(0,n)=1 여기서 주목해야 하는 점은 f(1,1)이다 f(2,2)는 f(1,2)와 f(2,1)의 합으로 나타낼 수..
Comparable은 Java.lang 패키지에, Comparator은 Java.util 패키지에 있는 인터페이스이다 Comparable 정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓는 인터페이스 자바에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며 정렬시에 Comparable의 구현 내용에 맞춰 정렬이 수행된다 기본적인 메서드 구성은 아래와 같다 int compareTo(T o){ ... } 클래스 내에서 구현할 때는 Comparable을 먼저 상속한 후, Override를 통해 구현한다 import java.lang.Comparable; class Student implements Comparable{ String StudentName..
Redux의 필요성을 깨닫고 Redux를 사용하려고 유튜브에 강의를 쳐 보았다! 항상 무엇이든 시작하기 전에 생활코딩님의 강의를 먼저 듣곤 했는데 이번에도 있었다 Redux에서 꼭 알아야 할 개념인 store, action, reducer, dispatch, subscribe 등 기능들이 어떤 방식으로 진행되는지에 대해 잘 설명해주셨고 충분히 이해하게 되었다 생활코딩 역시 개념은 정말정말 잘 가르쳐주신다 (완전 명강) 하지만 이 강의에서는 redux를 직접 설치하는게 아니라 script 소스 형태로 가져와 사용하였으며 하나의 html 내부에서 작성하였기 때문에 컴포넌트 분리를 해야 하는 입장으로서는 다시 공부를 해야했다 따라서 redux와 typescript를 이용하여 프로젝트를 진행하려는 나로서는 개발..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YQASJ/btq86gVIGQj/htNMv6B3kHyspFKRokC4V1/img.png)
Redux 자바스크립트 앱을 위한 예측 가능한 상태 컨테이너 개별 컴포넌트들이 각각 상태를 공유할 때 여러 컴포넌트를 거치지 않고 손쉽게 상태 값을 전달도록 함 Redux의 핵심 기능 State : 데이터의 집합 Store : state를 관리하는 장소로 객체 형식으로 저장 Dispatch : reducer를 불러 현재 state에 action을 넘겨줌 Reducer : dispatch로부터 action을 전달받아 state 변경 Action : state 변경을 일으키는 객체 형식의 정적 데이터 Subscribe : store 변경이 발생할때마다 dispatch 호출할 리스너 등록 Redux 사용이유 Redux는 Store라는 이름의 전역 자바스크립트 변수를 통해 관리 Redux를 사용하면 컴포넌트 간..
TypeScript 마이크로소프트에서 구현한 JavaScript의 슈퍼셋 프로그래밍 언어 확장자는 .ts이며 컴파일 결과물은 JavaScript 코드이다 TypeScript 특징 정적 타입을 명시할 수 있음 → 변수나 함수의 목적 명확히 전달 가능 코드 자동 완성이나 잘못된 변수/함수 사용에 대한 에러 알림 등의 풍부한 피드백 받음 자바스크립트를 실제로 사용하기 전에 있을만한 타입 에러들을 미리 잡을 수 있음 순수 자바스크립트에 비해 생산성이 뛰어남 API의 Input과 Output이 무엇인지 명확하게 표현 가능 TypeScript 개발 환경 설치 명령어 npm i -g typescript Windows의 파워셸에서 오류 발생시 관리자 권한 파워셸에서 명령어 입력 Set-ExecutionPolicy Re..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BngmD/btq8ZY0ST9C/flgmvB0wFabP5FYBvp58g1/img.png)
맹목적 탐색 이미 정해진 순서에 따라 상태 공간 그래프를 점차 형성해 가면서 해를 탐색하는 방법 대표적인 맹목적 탐색 : 너비우선탐색(BFS), 깊이우선탐색(DFS) 너비우선탐색 (BFS;Breadth First Search) 하나로 시작 정점을 방문한 후 시작 정점에 인접함 모든 정점들을 우선 방문하는 방법 갈림길에 연결되어 있는 모든 길을 한번씩 탐색한 뒤 다시 연결되어있는 모든 길을 탐색하는 방법 너비우선탐색은 트리나 그래프를 방문 또는 탐색하는 방법으로 순서는 다음과 같다 1. 루트에서 시작 2. 루트의 자식 노드들을 [1]에 저장 3. [1]에 저장된 노드들을 차례로 방문 후 각각 자식들을 [2]에 저장 4. [2]에 저장된 노드들을 차례로 방문 후 각각 자식들을 [3]에 저장 5. 위의 과정을..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cNgFoW/btq8VE1M8rC/LDSv28n18J3KK2MmKw7LAk/img.png)
그래프(Graph) 정점(Vertex)와 간선(Edge)로 구성된 자료구조 그래프 G는 꼭짓점의 집합 V와 변의 집합 E의 순서쌍으로 정의된다 G = ( V , E ) 그래프 용어 정점(vetex) : 노드(node)라고 불리며 데이터가 저장되는 장소 간선(edge) : 링크, arcs 라고 불리며 노드간의 관계를 나타냄 인접 정점(adjacent vertex) : 간선에 의해 직접 연결된 정점 정점의 차수(degree) : 무방향 그래프에서 하나의 정점에 인접한 정점의 수 진입 차수(in-degree) : 방향 그래프에서 외부에서 오는 간선의 수 진출 차수(out-degree) : 방향 그래프에서 외부로 향하는 간선의 수 단순 경로(simple path) : 경로 중 반복되는 정점이 없는 경우 사이클(..