[Algorithm] 에라토스테네스의 체
알고리즘/알고리즘 정리2024. 3. 11. 12:48[Algorithm] 에라토스테네스의 체

알고리즘에 대한 이해 !에라토스테네스의 체란 소수를 판별하는 알고리즘입니다 !소수를 대량으로 빠르고 정확하게 구하는 방법입니다.소수란 무엇인가 ?소수는 양의 약수를 두 개만 가지는 자연수, 즉 1과 자기자신으로만 나누어지는 수를 의미합니다.2, 3, 5, 7, 11 ...등이 있죠 !반복문을 통해 소수를 구하는 법을 먼저 확인하겠습니다 !private boolean isPrimeNumber(int targetNumber) { for(int i = 2 ; i 위와 같이 알고리즘을 작성하는 경우 소수 판별 알고리즘의 시간 복잡도는 O(N)입니다.즉 ! 모든 경우의 수를 다 확인하여 약수 여부를 확인한다는 점에서 몹시 비효율적이라고 볼 수 있죠 !에라토스테네스의 체 구현방법 !O(N)의 시간 복잡도를..

[Algorithm] 깊이 우선 탐색(DFS, 그래프 탐색) 알고리즘
알고리즘/알고리즘 정리2024. 3. 6. 01:10[Algorithm] 깊이 우선 탐색(DFS, 그래프 탐색) 알고리즘

알고리즘에 대한 이해 ! 알고리즘 문제 풀이에서 DFS, BFS를 많이 사용했었는데 이제야 알고리즘 정리를 하게됬네요 ! 깊이 우선 탐색(DFS)란 DFS(Depth-First Search)는 그래프의 시작 노드에서 자식의 노드들을 순서대로 탐색하면서 깊이를 우선으로 탐색하는 알고리즘 입니다 ! DFS는 주로 반복문을 활용하거나 재귀문을 통하여 구현합니다. DFS의 탐색 과정 DFS의 기본 탐색 과정은 특정 정점에서 시작하여 역추적(backtracking) 하기 전에 각 분기를 따라 가능한 한 멀리 탐색하는 것입니다. 탐색하는 과정은 다음과 같습니다 ! 현재 노드를 방문한 것으로 표시한다. 방문한 표시가 되어 있지 않은 각각의 인접한 정점을 탐색한다. 더 이상 방문하지 않은 정점이 없으면 이전 정점으로 ..

[Algorithm] 브루트 포스(Brute Force)
알고리즘/알고리즘 정리2024. 2. 5. 12:41[Algorithm] 브루트 포스(Brute Force)

알고리즘에 대한 이해 ! 4자리 비밀번호를 풀어야할 경우 단순 무식하지만 0000부터 9999까지 모두 대입하여 값을 찾는 것이 브루트 포스 알고리즘 혹은 완전 탐색 알고리즘이라고 부릅니다 ! Brute는 '단순히, 순전히', Force는 '힘' 순전히 힘만 갖고 밀어붙인다 라는 의미를 가지고 있습니다. 컴퓨터는 약 1초에 1억번(10^8)의 연산이 가능하다고 알려져 있는데, 브루트포스는 전체를 탐색하기에 좋은 알고리즘 방식이 아닙니다....(600억을 확인한다면 600초가 걸리고 확인하는 데만 10분이...) 그래서 실제로 알고리즘을 풀이할 땐, 문제가 브루트포스로 해결 가능한지 확인 후 불가능하다면 다른 알고리즘을 적용해서 시간복잡도를 줄여 해결해야합니다 !

[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with Java
알고리즘/알고리즘 정리2024. 2. 4. 17:00[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with Java

알고리즘에 대한 이해 !'슬라이딩 윈도우'란 ?슬라이딩 윈도우라는 말은 옆으로 '한칸씩 슬라이딩한다 .'라는 말과 배열의 그림이 창문을 모아놓은 것 같아 슬라이딩 윈도우라는 명칭이 되었다고 어디서 들은 것 같아요 !1차원 배열을 2회 이상 반복적으로 탐색해야 할 경우 O(n^2) 이상이 걸릴 시간 복잡도를 부분 배열을 활용하여 O(n)으로 줄일 수 있는 장점이 있습니다.부분 배열들을 활용하여 특정 조건을 일치시키는 알고리즘 이지만 부분 배열 길이가 고정적입니다.어떤 창문을 왼쪽부터 오른쪽으로 밀어 오면서 창문 안에 있는 값들을 부분 배열이라고 생각하면 될 것 같습니다 !0부터 n까지의 배열에서 최대의 합을 찾으려면 아래의 사진과 같이 0~4가지의 합을 먼저 구해 놓은 뒤 5번째 수를 더해주고 0번째 수를..

image