코테준비/개념

코테준비/개념

[알고리즘] 재귀 함수 (Recursive Function) - Python

재귀함수란? 자기 자신을 호출하는 함수로 팩토리얼 하노이 탑 등 동일한 작업을 반복해서 수행하는 문제엣 많이 사용됨. 재귀함수의 장점 직관적인 모습으로 간단히 구현가능 DFS, 백트래킹, 그리디 등 많은 알고리즘에서 사용되어 꼭 알아두어야 할 개념 재귀함수의 단점 종료 조건을 명시해주지 않으면 무한루프에 빠질 수 있음. 깊이가 너무 깊어지면 ( 너무 많은 반복호출 ) 많은 메모리를 차지한다. 불필요한 연산을 할 가능성이 있음. Python 에서의 재귀 파이썬에서 재귀의 깊이는 1000회라는 제한이 있다. def hello(): print('Hello, world!') hello() hello() 그래서 위 코드를 실행시키면 Hello world! 라는 문자열이 계속 출력되다 에러가 발생한다. 위에서 말한..

코테준비/개념

[알고리즘] Greedy Algorithm-탐욕 알고리즘

Greedy Algorithm(탐욕 알고리즘)이란? greedy의 사전적 의미는 욕심 많은, 탐욕적인 이라는 형용사다. 그럼 욕심 많은, 탐욕적인 알고리즘이 도대체 뭐야?? 간단하다 진짜 말 그대로 매 순간마다 욕심적으로 최적의 상황만을 고르는 알고리즘이다. 특징 탐욕 알고리즘은 크게 두 가지 특징이 있다. 1. 탐욕 알고리즘은 데이터 사이의 관계(단계별 관계)를 고려하지 않고 수행을 한다. => 이는 탐욕스러운 선택의 조건은 앞의 선택이 이후의 선택에 영향을 주지 않는다고 볼 수 있다. 2. 일단 선택한 것에 대해 절대로 번복하지 않는다. => 이미 선택된 데이터를 버리고 다른 것을 선택하지 않는다. (그래프 탐색은 아니라는 이야기) 이러한 특징들 때문에 대부분의 탐욕 알고리즘들은 매우 단순하며, 반면..

코테준비/개념

[알고리즘] 백트래킹 (Back-tracking)

백트래킹? 트리방식으로 동작된다고 이해하면 쉽다. 재귀함수를 통해 for문을 돌려 깊이를 마음대로 설정할 수 있음. DFS랑 백트래킹 뭐가 달라? 재귀함수를 통한 dfs랑 백트래킹이 유사하지 않나?라는 생각이 들었다. 둘 다 탐색이지만 원하는 값을 찾기 위한 방법에서 차이가 발생한다. 백트래킹은 불필요한 탐색을 하지 않는다. 경로를 찾아가는 도중에 해가 되지 않을 것 같은 경로에 왔다면 더 가지 않고 되돌아온다. 아래 사진을 보면 느낌이 팍 올 것이다. 되돌아올 때 밑에 노드는 애초 방문하지 않은 것처럼. dfs의 방문처리는 보통 배열을 사용하여 인덱스를 활용한 방문처리를 한다. 하지만 백트래킹은 다시 부모노드로 올라갈 때 이전의 노드들을 방문했다고 생각하지도 않고 진행한다. 그래서 보통 append()..

코테준비/개념

[알고리즘] BFS/DFS

평소에는 DFS, BFS 둘 중 뭘 써도 풀리는 문제들만 풀었어서 차이점(효율적인 측면)을 명확하게 잘 몰랐다. 그렇게 오늘도 알고리즘 문제를 풀다 갑자기 이 DFS BFS 적용 기준 정리에 필요성을 느껴 바로 실행에 옮기려 한다. BFS, DFS가 뭐야? 내가 알고있는 bfs, dfs는 그래프를 탐색하는 방법으로 알 고 있다. 각 dfs bfs에 대해 간단히 적어보겠다. BFS(너비 우선 탐색) 큐를 사용함 정점에서 가까운 노드들부터 탐색 찾는 노드가 인접할 때 유리 노드가 많을 수록 메모리를 많이 소비 DFS(깊이 우선 탐색) 스택 혹은 재위함수를 사용함 정점에서 가장 깊은 노드까지 들어가며 탐색 그래프의 깊이(depth)가 깊을 수록 빠름 메모리가 적음 언제 뭐 써야해? 공통 단순히 모든 정점을 방..

예찬예찬
'코테준비/개념' 카테고리의 글 목록