일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- canny edge detection
- AlexNet
- clustering
- dynamic programming
- 자료구조
- MySQL
- 강화학습
- machine learning
- 머신러닝
- exists
- Reinforcement Learning
- sklearn
- image processing
- IN
- classification
- SIFT
- dfs
- 백준
- DP
- C++
- Python
- Mask Processing
- MinHeap
- 인공지능
- 딥러닝
- opencv
- 그래프 이론
- edge detection
- TD
- BFS
- Today
- Total
목록백준 (31)
JINWOOJUNG
접근법 처음에는 0번째 부터 수열의 값을 체크 해 가면서 Max값을 다른 변수에 저장하고 해당 변수보다 큰 값이 있다면 Count를 1개씩 증가시키면서 변수를 Update하는 식으로 구현하였다. 너무 쉬운 감이 있었지만 역시 틀렸다. 10 20 5 12 17 30 다음과 같이 순열이 있다고 하자. 그러면 처음 접근법처럼 시도하면 Max = 10, Cnt =1일 것이다.하나씩 주어진 순열과 비교 해 나가면, Max = 20, Cnt = 1이고 그 뒤로 5,12,17은 전부 20보다 작아서 Count 하지 않고, 마지막 30만 Count 되어서 Max = 30, Cnt = 3으로 가장 긴 증가하는 부분 수열의 길이는 3이 된다. 하지만 5, 12, 17, 30 이 더 긴 증가하는 부분 수열로, 길이는 4가 ..
접근법 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 여기서 부분 열은 상대적인 순서를 유지해야 하는데, 예를들어 ACAYKP의 부분 수열은 ACA, ACP, CYK, CAP 등 순서를 유지한 부분 수열이다. DP의 대표적인 문제 중 하나로, 스트링 편집 거리와 유사하게 접근해 볼 수 있다. 위에서 주어진 예시를 이용하면 "ACAYKP", "CAPCAK"의 LCS를 찾아야 한다. 스트링 편집 거리와 같이 한 문자열은 고정시켜 두고, 나머지 하나의 문자열 중 하나씩 증가시키면서 비교 해 보자. ACAYKPC0 "C"와 "A"의 LCS는 없다. 따라서 0이다. ACAYKPC01..
접근법 BFS, DBF의 구조를 이해했다면, 이 문제를 보고 바로 BFS를 떠올렸을 것이다. BFS는 너비 탐색이다. 문제를 보면, 토마토는 익은 토마토에 의해서만 익을 수 있고, 우리는 전체 토마토가 익는 최소 일수를 구해야 한다. 따라서 BFS의 접근법이 더 맞다. 또한, 이전엔 노드와 노드사이의 하나의 간선만 존재하였다. 하지만, 익은 토마토를 기준으로 상,하,좌,우를 모두 탐색해야 한다. 그리고 시작 노드는 처음 토마토가 주어졌을 때 모든 익은 토마토에 대하여 시작해야 한다. 3번재 예제를 살펴보면, (0,0),(4,6)의 토마토가 처음 익은 토마토로 주어졌다. 따라서 시작 노드를 (0,0) 하나로 특정하면, (6,4)에 의해 익어진 토마토의 경우의 수를 고려하지 못하기 때문이다. BFS의 기본..
접근법 가장 기본적인 BFS/DFS 문제 중 하나이다. 이번 포스팅에서는 BFS에 대하여 알아보고, BFS 방식으로 풀어볼 것이다. 물론, DFS로 풀어도 상관없다. BFS(Breadth First Search)BFS는 너비 우선 탐색 방법이다. 순서는 다음과 같다. 1. 시작 노드 StartNode 방문.2. 노드 StartNode에 인접한 정점 중 방문하지 않은 정점에 대하여 모두 Queue에 저장3. Queue에서 정점을 삭제하면서 새로운 StartNode를 설정하고, 단계(1)을 수행4. Queue가 Empty 상태이면 종료 이에 대한 수도코드는 다음과 같다. 수도코드 기반으로 그대로 구현하면 된다. 3번 과정에서 Queue에 저장한 노드들에 대하여 단계 1을 반복하므로 while문으로 반복 중..
접근법 최단경로 찾기에 적용 가능한 Dynamic Programming Algorithm이 바로 Floyd(플로이드)이다. 문제를 보면 특정 도시에서 다른 도시로 가는 서로다른 비용을 가지는 버스가 존재하고, 특정 도시에서 다른 도시로 가는 최소 비용을 구하는 문제이다. 따라서 주어진 문제(경로에 따른 비용)에 대하여 하나 이상의 많은 해가 존재할 때, 최적의 해답을 찾아야 하는 최적화 문제이다. 우리는 주어진 정보 중 출발 도시와 도착 도시 사이의 최소 cost를 원소로 가지는 인접 행렬식 $W$를 포현할 수 있다. 예를들어, $W[i][j]& 는 $i$에서 $j$로 가는 최소 비용을 의미한다. 만약 $i$에서 $j$로 가는 버스가 없다면, 구해야 하는 것은 최소 비용이기 때문에 무한대로 표현하고, ..
접근법또 다시 DP 문제이다. 각 물품에는 Weight, Value가 존재하고, 배낭이 버틸수 있는 Limit Weight는 K로 제한되어 있다. 따라서 목표는 Weight Sum이 K 이하인 최대한의 가치합을 가지는 물건들을 선택해야 한다. 최적성의 원리를 적용하여 해당 문제를 Dynamic Programming으로 해결할 수 있는지 살펴보자. 우리는 위와 같은 Table을 생각할 수 있다. 제한되는 무게에 따라서 각 물품을 담을 수 있는지가 결정되고, 그에 따라서 Value의 최대 합이 달라지기 때문이다. 따라서 해당 Table의 각 원소는 Limit Weight보다 작은 범위에서 고려되는 물품들의의 개수에 따른, 담을 수 있는 물품들의 가치 최대합이 들어가게 된다. 따라서 각 물품들의 Weight..
접근법 연쇄적인 행렬의 곱셈 순서를 결정하는 것은 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() 과정에서 줄어..