728x90 반응형 C++47 백준-2468 안전영역 1. 안전영역(DFS) 이 문제 또한 DFS를 활용하여 깊이 탐색을 하는 문제였다. 앞서 문제와 한 가지 다른점은 앞서 유기농 배추 문제는 모든 배열의 값이 0아니면 1이 들어가서 바로 dfs를 탐색할 수 있었던 반면에 이 문제에서는 각 배열마다 다른 높이가 존재해서 높이를 비교하면서 가야한다는 점이 있었다. 하지만 메모리 적으로 여유가 있어 나는 먼저 침수 높이d와 비교해 더 낮은 지대를 1의 값으로 갖는 비교 배열을 만들어준 후 앞선 유기농 배추 문제와 같이 dfs를 실행해주었다. dfs함수에서는 우선적으로 방문 배열을 1로 표시해주어야 하는 것이 중요하다는 것을 명심하자. 다음은 내가 문제를 푼 코드이다. #include #include #include using namespace std; int .. c++/알고리즘 2022. 3. 29. 백준-1012번 - 유기농 배추 내가 백준 문제를 풀면서 느낀 점은 채점을 할 때 맞게 하고 싶다면 문제에서 변수들을 잘 파악해야한다는 것이다. 우선 문제를 살펴보면 테스트 케이스를 의미하는 변수 T가 존재한다. 또한 배추를 심은 배추밭의 가로길이 M, 세로 길이 N, 배추를 심은 개수 K가 존재한다. 또한 그 후 배추의 위치를 나타내는 변수론느 x, y가 존재한다. 그럼 일단 6개의 변수가 존재하는 것이다. 그 후 반복문 안에서 다음 배열 인덱스를 담아 줄 ny, nx변수와 최종 개수를 ret할 ret 변수까지 9개가 존재한다. 또한 이 문제는 깊이 탐색 문제이므로 배추의 위치를 표현할 map과 그 배열과 같은 크기의 방문 여부 배열이 필요하다. #include #include #include using namespace std; i.. c++/알고리즘 2022. 3. 29. 백준2178번-미로BFS 이 문제는 가중치가 같은 맵 안에서의 최단 경로를 찾는 문제이다. 이는 자료구조 queue를 사용하며 풀면 되는데 나의 코드는 다음과 같다. #include #include #include #include using namespace std; int n, m, y,x; int max = 104; int a[104][104]; int visited[104][104]; // 입력 배열과 방문 배열 int dy[4] = {-1,0,1,0}; int dx[4] = {0,1,0,-1}; int main() { cin >> n; cin >> m; for(int i = 0; i >a[i][j]; } }//입력 만들기 queue q; // q.. c++/알고리즘 2022. 3. 28. opencv C++ BandPass Filter .BandPass Filter란? Band Pass Filter란 말 그대로 특정 영역의 주파수만 통과시키는 필터이다. 우리는 흔히 LPF HPF로 부르는 Low pass filter와 High pass filter의 혼합인데 영상에서 주파수란 흔히 변화량이라고 생각하면 되겠다. 예를 들어 바다가 넓게 펼쳐져 있는 이미지의 경우 파란색의 반복이라 주파수가 좀 낮은 영역에 해당할 것이고 사람의 머리카락을 찍은 사진의 경우 해상도가 높다면 머리카락 하나하나가 다 보일것이기 때문에 주파수가 높은 편에 속할 것이다. 또한 한 이미지안에 픽셀별로 주파수는 다르다. Low pass filter는 낮은 주파수 영역대만 통과시키고 높은 주파수 영역은 차단시킨다. 즉 상대적으로 영상에서 밋밋한 부분만을 나타내는 것이다... open-cv 영상처리 2022. 3. 24. opencv c++ sobel filter 1. sobel filter sobel filter란 주파수의 방향성에 따라 필터링을 해주는 필터이다. 예를 들어 이러한 이미지의 경우 수직으로는 변화량이 거의 없지만 수평으로는 흰색 검은색이 반복하며 변화량이 큰 것을 알 수 있다. 이러한 이미지를 sobel filter에 넣고 적용하면 수평 방향으로 이미지가 나오게 된다. c++ 로 sobel filter를 구현하는 코드는 다음과 같다. Mat mySobelFilter(Mat srcImg) { int kernelX[3][3] = { -1, -1,2, -1,2,-1, 2 ,-1,-1 }; // 45도 마스크 int kernelY[3][3] = { 2,-1,-1, -1,2,-1, -1,-1,2 }; //135도 마스크 //마스크 합이 0이 되므로 1로 정.. open-cv 영상처리 2022. 3. 23. shell sort c++ #include #include #include #define MAX 30 #define MAX1 100000 #define MAX2 500000 #define MAX3 1000000 #define MAX4 5000000 #define MAX5 10000000 using namespace std; void shell_sort3h1(int a[], int n) { /* h = 3*h + 1 이용 */ int i, j, k, h, v; for (h = 1; h 0; h /= 3)// h의 값을 줄여가면서 계산 { for (i = h; i = h && a[j - h] > v) { a[j] = a[j-h]; j.. c++/알고리즘 2022. 3. 23. 백준 9996 #include #include #include using namespace std; int n; string pattern; string filename; string pre; string back; int main() { cin >> n; cin >> pattern; for(int i = 0; i > filename; if(filename.substr(0, pre.size()) .. c++/알고리즘 2022. 3. 19. 피보나치 수열 #include #include #include using namespace std; int Fibonacci(int num) { if (num == 0) return 0; else if (num == 1)return 1; else return (Fibonacci(num - 1) + Fibonacci(num - 2)); } int SIZE = 30; void main() { // IO 속도 향상 ios_base::sync_with_stdio(false); cin.tie(NULL); clock_t start, finish; double duration; start = clock(); Fibonacci(SIZE); finish = clock(); duration = (double)(finish - start.. c++/알고리즘 2022. 3. 16. 자료구조 stack을 이용한 문제 풀이 1(postfix) 우리는 후위표기식에 대해 알아볼 것이다. 후위 표기식이란 컴퓨터가 알아보기 쉽게 하는 표기 방식으로 우리가 흔히 연산을 표시하는 표시 방법인 중위 표기식과는 사뭇 다르게 생겼다. 예를 들어 중위 표기식에서 3+5 와 같은 식을 후위 표기식으로 표시하게 되면 3,5+와 같이 표기된다. 좀 더 복잡한 중위 표기식 예를 들면 A+B-C*D와 같은 경우에서는 연산 우선 순위가 *가 가장 높으므로 이것부터 처리해준다. A+B-CD* -> AB+-CD*>AB+CD*- 와 같이 변하게 된다. 이것이 후위 표기법이다. 몇 가지의 예시를 더 살펴보겠다. 1. A+B*C -> A+BC* 2. A*B-C -> AB*-C -> AB*C- 이와 같이 컴퓨터는 순서대로 읽으므로 컴퓨터가 읽기 쉽도록 표기법을 수정하는 것이다. .. c++ 2021. 6. 18. opencv 사진 합성 opencv는 이미지나 영상을 다룰 수 있게 해주는 라이브러리다. 오늘은 포토샵이나 사진 편집 툴이 아닌 그 툴들이 어떻게 이미지나 영상을 합성하고 다루는 지에 대해서 들여다 볼 것이다. 이미지를 픽셀 단위로 연산하는 함수들은 여러가지가 있다. 대표적으로 bitwise_and(and는 두 개의 operand들이 모두 1이어야 1이 된다.) bitwise_or(or는 두 개의 operand 중 하나만 1이어도 1이 된다.) 여기서 1이라는 뜻은 픽셀 값이 0이 아니라는 것이다. 즉 , 검정색이 아니라는 것이다. 이 것은 흑백 사진에서 해당된다. bitwise_and함수에서는 검정색인 부분이 우선 순위를 갖는다. bitwise_or 함수에서는 검정색이 아닌 부분들이 우선 순위를 갖는다. 또한 픽셀의 값을 더.. open-cv 영상처리 2021. 6. 18. opencv spread salt 1. opencv를 이용해서 픽셀 단위에 접근하기 opencv에서 이미지 및 영상은 Mat이라는 클래스 안에 담기게 된다. 이 이미지들이나 영상들은 컴퓨터 화면의 하나의 픽셀들로 이루어지는데 opencv 라이브러리를 사용하여 이미지나 영상의 픽셀 하나하나에 접근하여 조작을 할 수 가 있다. 이 떄 사용되는 opencv키워드가 at이다. at 키워드를 사용하면 이미지나 영상의 픽셀 하나하나에 접근이 가능하다. 이미지의 픽셀에 접근하기 위해서는 이미지나 영상이 가지고 있는 특성을 알아야한다. 이미지는 일단 흑백과 컬러로 구분할 수 있다. 이 때 흑백은 그저 검정색과 흰색의 밝기 차이로서 내부에서의 형태를 구분하지만 컬러 사진인 경우 파란색 채널과 초록색 채널 빨간색 채널 순으로 색들을 합성하여 컬러 사진을 .. open-cv 영상처리 2021. 6. 18. 이전 1 2 3 4 다음 728x90 반응형