1주차만큼이나 험난한 2주차였던 것 같다.
미니프로젝트와 또다른 의미로 알고리즘도 만만치가 않다.
미니프로젝트에서 소진 되었던 나의 체력을 보충하는 것이 시급했고,
이후에는 바로 알고리즘에 적응해야 했다.
한 챕터가 지나면 돌아오지 않기에 ... 계속해서 이전의 것들까지 놓치고 싶지 않다는 마음은 있었으나
하루 한 챕터 안에서 문제 풀이도 완전한 이해를 못하고 넘어간 것이 반복이었다.
이러한 여러 생각들이 머릿 속을 떠돌기도 하는데.
어떠한 말도 정답이 아니다. 남들 만큼 해야하는 건 아니고, 이해를 못하는 날이 있을 수도 있지만.
그렇다고 못하는 것이 당연하진 않기에.
어제 한 주의 끝에 TIL을 적으며 '정박' 그리고 '수리' 하기로 마음 먹은 것처럼.
태풍에 휩쓸리지 않도록 조심해야겠다.
페이스 조절이 필요하다. 알고리즘 뿐 아니라 항해 전반에 걸쳐서.
앞으로 적당히 하다가 말 것 아니니까.
개발자가 되어도 공부는 계속 되어야 하니까.
여태 내가 살아오던 삶이 있는데, 이걸 무너뜨리고 세우는 건 아니니까.
전반적인, 전격적인, 대대적인. 마음의 정박과 수리가 필요하다.
진짜 '항해'를 하기 위해서.
시험을 마치고 나니, 심지어 두 번째 문제를 팀원들 중 유일하게 풀어내다 보니.
바로 나태해졌다. 쉬고 싶다는 생각이 밀려왔나 보다 ...
그러면서 오후 시간 관리를 잘 못했다.
문제 풀이에 집중이 되지 않았다. (이것이 진짜 독이 되었다 ㅜㅜ 다음날부터 dfs, bfs 였으니 ....)
문제는 진짜 많이 풀었네(건드렸네) ..
이번 주 가장 고생해서, 가장 머릿속에 많이 남고, 계속 생각 나는 ! DFS와 BFS를 알기 위해서는
스택과 큐 자료구조에 대해 충분한 이해가 있어야 한다.
- 스택
- 먼저 들어온 데이터가 늦게 나가는 '선입후출' 방식
- 출처 : https://heytech.tistory.com/46
- 큐
- 먼저 들어온 데이터가 먼저 나가는 '선입선출' 방식
- 출처 : https://heytech.tistory.com/54?category=464168
- DFS와 BFS의 차이
- 출처 : https://namu.wiki/w/%EB%84%88%EB%B9%84%20%EC%9A%B0%EC%84%A0%20%ED%83%90%EC%83%89
- DFS(깊이우선탐색)
현재 정점에서 갈 수 있는 점들까지 들어가면서 탐색
스택 또는 재귀함수로 구현- BFS(너비우선탐색)
현재 정점에 연결된 가까운 점들부터 탐색
큐를 이용해서 구현- 문제 풀이 방식 :
- 그래프의 모든 정점을 방문하는 것이 주요한 문제 혹은 단순히 모든 정점을 방문하는 것이 중요한 문제의 경우 DFS, BFS 두 가지 방법 중 어느 것을 사용해도 된다.
- 경로의 특징을 저장해둬야 하는 문제의 경우, 예를 들면 각 정점에 숫자가 적혀있고 a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안 된다는 문제 등, 각각의 경로마다 특징을 저장해둬야 할 때는 DFS를 사용하는 것이 좋다. (BFS는 경로의 특징을 가지지 못하기 때문에)
- 최단거리 구해야 하는 문제의 경우, 예를 들어 미로 찾기 등 최단거리를 구해야 할 경우, BFS가 유리하다.
깊이 우선 탐색(DFS)으로 경로를 검색할 경우 처음으로 발견되는 해답이 최단거리가 아닐 수 있지만,
너비 우선 탐색으로 현재 노드에서 가까운 곳부터 찾기 때문에 경로를 탐색 시 먼저 찾아지는 해답이 곧 최단거리기 때문이다.- 이밖에도 검색 대상 그래프가 정말 크다면 DFS를 고려하고, 검색대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS를 사용하는 것이 좋다.
(그래프가 커서 DFS가 오래 걸릴 것 같아서 꺼려질 수 있지만, 몇 번을 반복해야 하는지 모르는 상태이기에 DFS를 사용하는 것이 맞는 것 같다 ->내 생각)
알고리즘이 몸에 익는 과정에 '완전한 이해'를 붙들고 가자.
알고리즘 !