DFS, BFS의 개념에 대해 안다.
근데 코드를 보면 잘 이해가 가지 않는다.
저렇게 하는게 방문이 되는거라고?
그냥 배열 쭉 탐색 한번 하는게 방문한거라고?
아니 애초에 저 2차원 배열이 그래프랑 같은거야?
사실 볼 때마다 이해하기 어려웠다.
이번에 프로그래머스 "네트워크" 문제를 풀면서 계속 고민하고,
코딩에 써먹어본 결과 몇가지 결론이 도출됐고,
이해가 잘 된 것 같다.
return 하는 결과물(visited 1차원 배열)은
방문했던 노드들을 방문 순서대로 나열한 것이다.
위 그림과 같다면 visited 배열은
[1, 2, 3, 4, 5, 6, 7, 8, 9]
이 되어 return 될 것이다.
dfs가 한번 끝나면 하나의 그래프가 다 방문된다.
즉, 주어진 인풋이 여러개의 그래프가 있다면,
다른 반복문(for / while)을 써서 다시 탐색해야한다.
※코드에 따라 이때는 시작점(root)을 다시 설정해줘야 할 수도 있다.
BFS와 DFS는 딱 한개 차이가 난다.
stack을 쓰는 것과 queue를 쓰는 것이다.
그렇게 문제를 풀고 네트워크의
다른사람의 코드를 보니,
보통 타인의 코드를 보면 깜짝 놀랄만큼 간결한 답이 있어서
아 정말 난 멀었구나.. 라고 생각이 들지만,
이번 문제는 다 제각각이다.
시간복잡도가 심각한 답변도 있었고,
내가 맨 처음에 발상했던 것 처럼 DFS, BFS가 아닌 꼼수를 쓴 코드도 있었다.
그만큼 정해진 답이 없는 문제인 것 같다.
간단한 문제지만
문제가 해결될때 양손들고 소리를 지르며 테스트케이스가 통과되는 것을 봤다.
난 역시 천성 개발자 인가봥 헤헤
반응형
'개발' 카테고리의 다른 글
One-to-many 관계에서 누가 주인 테이블이 될까 (chat gpt) (0) | 2023.01.29 |
---|---|
Classic ASP JSON, DLL추가, JScript, AES256-CBC (0) | 2022.06.23 |
Classic ASP 개발환경 세팅 (include, import, 디버깅) (3) | 2022.06.17 |
리플릿(Repl.it)에서 .replit 파일 RUN 설정하는 방법!!! (4) | 2020.04.21 |
당신도 티스토리를 시작해보자! (0) | 2020.04.20 |