스터디 진행 일시
날짜 : 2월 14일 (금요일) 시간 : 7시 ~ 9시 장소 : 강남(오프라인)
금주 스터디 주제
- 자료구조 : BFS
- BFS 구현하기 (Java or Python)
주제에 대해 진짜 잘 이해했는지 토론하는 시간
🧐 BFS 개념 토론
- BFS와 DFS의 차이점은 무엇인가요?
- BFS에서 큐(Queue)를 사용하는 이유는 무엇인가요?
- BFS의 시간 복잡도와 공간 복잡도는 어떻게 계산되나요?
- BFS를 사용하면 최단 경로를 항상 찾을 수 있을까요?
- BFS의 주요 응용 분야는 무엇인가요?
- BFS를 트리(Tree)에서 사용할 때와 그래프(Graph)에서 사용할 때 차이점은 무엇인가요?
- BFS를 재귀적으로 구현할 수 있을까요?
- BFS를 실행할 때 방문 여부를 체크하지 않으면 어떤 문제가 발생할 수 있나요?
- BFS를 이용해 사이클이 존재하는 그래프에서 최단 경로를 찾을 수 있나요?
- 네트워크의 모든 노드가 연결되었는지 확인하는 방법을 BFS를 이용하여 설명해주세요.
- BFS를 활용하여 트리의 각 레벨을 출력하는 방법을 설명해주세요.
- 다익스트라 알고리즘과 BFS의 차이점을 설명하고, 언제 BFS 대신 다익스트라를 사용해야 하는지 설명해주세요.
- 가중치가 없는 그래프에서 BFS를 사용하여 두 정점 간 최단 경로를 찾는 방법을 설명해주세요.
- BFS에서 큐(Queue) 대신 스택(Stack)을 사용하면 어떤 문제가 발생할까요?
- 그래프가 방향 그래프(Directed Graph)일 때와 무방향 그래프(Undirected Graph)일 때 BFS 탐색 방식의 차이를 설명하세요.
- BFS를 사용하여 트리에서 특정 깊이에 있는 모든 노드를 찾는 방법을 설명하세요.
- BFS를 사용하여 최단 경로를 찾을 때, 노드의 개수가 많아 메모리 사용이 문제된다면 어떻게 해결할 수 있을까요?
- BFS를 활용하여 다중 출발 지점(Multiple Source)에서 최단 거리를 구하는 방법을 설명하세요.
📖 개발 도서 읽기: 구글 엔지니어는 이렇게 일한다
“1장 소프트웨어 엔지니어링이란 ?” 까지 진행했고, 내용은 아래와 같다.
- 핵심 내용 요약:
- 프로그래밍은 코드를 짜는 것이다.
- 소프트웨어 엔지니어링은 프로그래밍을 확장하여 수명이 다할 때까지 코드를 유지보수하는 문제까지 고려한다.
- 의존성, 기술, 제품 요구사항 변경에 대응할 역량이 갖춰져야 지속 가능한 소프트웨어다.
- 조직에서 반복적으로 수행하는 모든 작업은 필요 인력 측면에서 확장 가능해야 한다.
- 의사결정은 데이터 주도로 하겠다는 생각은 좋지만 현실은 데이터, 가정, 선례, 논의를 종합하여 의사결정을 이룬다.
- 인상 깊었던 부분:
- 프로젝트를 진행 할때 엔지니어는 시간의 흐름과 언젠가 변경될 가능성에 더 신경을 써야 한다.
- 비욘세 규칙 : ‘네가 좋아했다면 CI테스트를 준비해뒀어야지’ 라는 뜻이다.
- 공통 CI시스템에 추가해두지 않은 테스트는 인프라팀이 책임지지 않는다는 뜻이다.
- 데이터 기반의 의사결정은 좋은 생각이지만 현실적으로 데이터, 선례 등 여러 요건을 고려하여 의사결정을 한다.
- 근데 정말 이전에 없던 기능이나 기술을 선보이는 경우에는 데이터나 선례가 없는데 이 때는 가상의 데이터와 프로세스를 가지고 의사결정을 해야한다.
- 스터디 토론 내용:
- 조직이 성장하고 프로젝트가 확장될수록 소프트웨어 생산 효율도 높아지는가?
- 지속 가능성을 위해 제품의 업데이트는 어느 주기로 하는것이 좋은가 ?