목록Data Structure & Algorithms/Algorithms-Concept (3)
yeonuel-tech

알고리즘을 공부하기 시작하면 가장 먼저 공부하게될 알고리즘은 브루트포스 알고리즘이다 그 이유는 가장 쉽고 기본이되는 알고리즘이기 때문이다. 이제 브루트포스 알고리즘에 대해 공부해보자 1. 브루트포스 알고리즘이란? 문제에서 발생하는 모든 경우의 수를 따져서 정답을 구하는 방식이다. 그래서 코드 상에 실수만 없으면 모든 문제를 풀수 있다. 즉 정확도가 100%인 알고리즘이다 하지만, 모든 경우를 따져서 장답을 구하기 때문에 성능이 매우 안좋다. 그래서 브루크 포스 알고리즘을 적용하기 전에 제한시간내에 풀 수 있는지 반드시 확인해야한다. 제한시간 내에 풀 수 있는지 확인해 보려면 문제에서 제시한 제한시간이 몇 초인지 확인한 다음 해당 시간내에 실행될 수 있는 최대 시간 복잡도를 구한다. 이때 문제에서 제시한 ..

https://namu.wiki/w/%EB%B8%8C%EB%A3%A8%ED%8A%B8%20%ED%8F%AC%EC%8A%A4 브루트 포스 - 나무위키 예를 들어 예전 하나 워드 같은 프로그램은 문서에 암호를 걸어 놓고 문서 파일을 헥스 에디터로 열어보면 암호가 문서 파일 헤더에 적혀있는 것을 볼 수 있다. 즉, 데이터는 그대로 평문인 채 namu.wiki 브루트 포스를 단순한 알고리즘이지만 강력하다 브루프 포스는 문제에서 발생할 수 있는 모든 경우에 대해 다 따져보면서 문제를 해결한다 그러기 때문에 정확도는 100%이다 하지만, 문제가 있다 바로 무식하게 모든 경우를 따지기 때문에 효율적인 알고리즘은 아니다 즉, 이 알고리즘을 적용했을 때 제한 시간내에 작동하는지 따져봐야 한다 문제에서 보통 시간 제한과 ..

다이나믹 프로그래밍 기본 개념 출처 : https://en.wikipedia.org/wiki/Dynamic_programming 위의 사진은 DP 알고리즘을 생각할 때 쉽게 연상되는 그림이다 바로 분할관점에서 바라보면 이해하기 쉽다 밑에서 자세히 설명하겠다 내가 생각하는 DP 알고리즘의 핵심은 분할과 중복이다 분할은 "문제를 하위 문제들로 분할할 수 있고, 분할된 하위 문제 결과를 통해서 상위 문제를 해결해 나갈 수 있음"을 의미하기 때문이다 중복은 "분할된 하위 문제들이 중복적으로 나타나는 것"을 의미한다. 이는 DP의 메모이제이션을 통해 중복되는 문제 반복적으로 계산하지 않을 수 있다 그럼 일단 분할 관점에서 DP 알고리즘이 어떻게 문제에 적용되는지 간략하게 보자 출처 : https://en.wiki..