일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- exists
- Python
- 인공지능
- SIFT
- clustering
- TD
- edge detection
- 머신러닝
- 자료구조
- C++
- 딥러닝
- 강화학습
- MinHeap
- Mask Processing
- 그래프 이론
- dynamic programming
- opencv
- BFS
- AlexNet
- classification
- image processing
- IN
- MySQL
- sklearn
- machine learning
- Reinforcement Learning
- 백준
- dfs
- DP
- canny edge detection
- Today
- Total
목록백준 (34)
JINWOOJUNG
접근법 연쇄적인 행렬의 곱셈 순서를 결정하는 것은 DP 문제 중 하나로, 효율적은 행렬 곱셈 순서를 결정하는 문제이다. 문제에서 언급 되었듯이 행렬의 곱셈 순서에 따라서 요구되는 계산량이 달라지기 때문에, 곱셈 연산을 최소로 하는 순서를 결정해야 한다. 가장 기본적인 행렬 곱셈의 규칙을 생각 해 보자. $A$ 행렬은 $ i by j $, $B$ 행렬은 $k by l$이라 하면, 행렬 $A,B$의 곱셈 연산이 성립하기 위해서는 $j == k$여야 하며, 계산된 행렬을 $C$라 하면, $C$의 크기는 $ i by l $이 된다. 이러한 규칙을 고려하여, 연쇄 행렬곱셈을 DP를 이용하여 해결하기 위해서 재귀 관계식을 구축하면 다음과 같다. $$d_k = 행렬 A_k의 열의 수 /to A_k의 행의 수는 ..
문제 접근법 https://jinwoo-jung.tistory.com/56 [ 정렬 - 24173 ] 알고리즘 수업 - 힙 정렬 1(C++) 문제 접근법 Heap Sort를 알기 전, Heap에 대해서 알아야 한다. Heap은 다음과 같은 특징을 가지고 있다. Degree = 2 Complete Binary Tree 부모노드와 자식 노드간의 상하관계 좌, 우의 상하관계가 아니라 Min, M jinwoo-jung.tistory.com 지난 힙 정렬 1에서 설명한 Heap과 해당 코드의 내용으로 접근법에 대한 설명한 생략한다. 이번 문제는 교환 횟수에 따라서, 해당 교환까지 진행한 전체 Tree의 정렬 상태를 출력하는 문제이다. 이전에 언급 한 것처럼, s32_N Index는 Sorting() 과정에서 줄어..
문제 접근법 Heap Sort를 알기 전, Heap에 대해서 알아야 한다. Heap은 다음과 같은 특징을 가지고 있다. Degree = 2 Complete Binary Tree 부모노드와 자식 노드간의 상하관계 좌, 우의 상하관계가 아니라 Min, Max Heap에 따른 부모와 자식간의 상하관계 Complete Binary Tree를 조금 더 살펴보면, 노드를 삽입 시 왼쪽부터 즉, 삭제 시 오른쪽 부터 삭제하는 Tree 구조이다. 따라서 수도코드를 살펴보면 일반적인 트리 구조와는 다른 모습을 보이고 있음을 확인할 수 있다. Min Heap임을 고려하여 해당 코드를 분석 해보자. void build_mean_heap(int32_t ars32_A[], int32_t s32_N) { int32_t s32_I..
문제 접근법 가장 기본적인 트리 구조이다. 처음에는 1차원 배열을 이용하여 해당 트리를 구현하고자 하였다. 부모 Index *2가 왼쪽 자식, 부모 Index *2+1이 오른쪽 자식임을 이용한다면 할 수 있을 것이라 생각했다. 하지만 Input이 들어올 때 배열 내에서 해당 부모의 위치를 탐색한 후 왼쪽, 오른쪽 자식을 찾아야 하기 때문에 불필요한 탐색과정이 요구되고 구현하기도 쉽진 않다. 따라서 가장 많이 이용하는 Class를 이용하여 전위, 후위, 중위 순회를 구현하였다. 기본적인 Class 구조는 다음과 같다. typedef class NODE { public: char c_Alphabet; NODE* pst_Left; NODE* pst_Right; NODE(char val) : c_Alphabet..
문제 접근법 DP 문제이다 직접 해보자. 1 -> 1 -> 1 2 -> 1 + 1 -> 2 3 -> 1 + 1 + 1 -> 3 4 -> $2^2$ -> 1 5 -> $2^2 + 1$ -> 2 = 1 + DP[5- $2^2$ ] 6 -> $2^2 + 1 + 1$ -> 3 = 1 + DP[6-$2^2$] 약간 규칙이 보일 것이다. 자연수 N의 제곱으로 표현되는 1,4,9 등은 1개가 최소이다. N의 제곱으로 표현되지 않으면, 나와 가장 가까운 자연수 N의 제곱을 뺀 DP[] 값에 1을 더해주면 된다. 하지만 예외사항이 발생한다. 23의 경우 위 논리데로 수행하면 DP[23] = DP[7] + 1, DP[7] = DP[3] + 1 = 4이므로 DP[23]은 5이 된다. 이는 넷 혹은 그 이하의 자연수의 제곱의..
문제 접근법 DP 문제이다 직접 해보자. 문제를 요약 해 보자면 한번에 한칸 혹은 두칸을 움직일 수 없으며, 3칸 연속으로 움직일 수 없다. 즉, 출발 위치가 아닌 특정한 위치에서 한칸 움직였다면, 무조건 두칸을 움직여야 하며, 두칸 움직였다면 무조건 한칸 움직여야 한다. 이러한 규칙을 발견했으므로, 가능한 경우에수는 총 4가지로 추릴 수 있다. 시작 위치에서 1칸 움직임 +1, +2 의 순서로 움직임 +2, +1 의 순서로 움직임 시작 위치에서 2칸 움직임 +1, +2 의 순서로 움직임 +2, +1 의 순서로 움직임 하지만 이를 코드적으로 표현하기가 힘들다. 0 1 2 4 5 7 ... 0 1 3 4 6 7 ... 0 2 3 5 6 8 ... 0 2 4 5 7 8 ... 하나의 for 문으로 4가지 모..
문제 접근법 DP 문제이기에 직접 하나하나 해 보면서 규칙을 찾고자 하였다. 하지만, 색상에 따른 Cost를 기준으로 규칙을 찾기에는 각 Cost는 변경되고, 동일한 Cost에 대한 처리가 힘들어 포기하였다. Cost가 결정되는 기준은 결국 각각의 집이 칠하고자 하는 RGB색상에 의해 결정된다. 집의 색상을 결정하는 규칙은 결국 1번째 집부터 시작하여 다음집과 색상이 안겹치면 된다. 이 점에서 나올수 있는 경우의 수를 생각 해 보면, 다음 집의 색상이 R이 되기 위해선 이전에는 G,B가 되어야 한다. 다음 집의 색상이 B이 되기 위해선 이전에는 R,G가 되어야 하며, 다음 집의 색상이 G이 되기 위해선 이전에는 R,B가 되어야 한다. for (s32_I = 1; s32_I > ars32_Cost[0] >..
접근법 처음엔 피보나치 함수의 Code가 주어졌으니, 직접 재귀함수를 실행하면서 n이 1 또는 0일 때, 조건문을 걸어 개수를 계산하려고 하였으나 역시나..시간초과! 따라서 DP문제이기에 몇가지를 시도해본 결과 왼쪽이 0이 출력되는 개수, 오른쪽이 1이 출력되는 개수이다. 즉 피보나치 함수의 재귀적인 호출 처럼 각각의 출력 개수 역시 -1, -2 번째의 출력 개수의 합으로 유도할 수 있음을 알 수 있다. 하지만 0의 경우 1,2번재 부터 유효하고, 1의 경우 0,1 부터 유효하므로 두 DP 배열의 0,1,2번째 원소는 직접 입력하고, 나머지는 반복문을 돌면서 계산하면 된다. 정답 #include #include using namespace std; int32_t st_DP0[41]; int32_t st_..