개발자 기술면접 꼬리물기 질문
  • Welcome
  • 01 Java
    • 01-01. Generic
    • Garbage Collection
    • 자료형과 객체 비교
    • 힙(Heap)과 메모리(Memory)
    • JDK 버전과 JRE
    • 스레드(Thread)
    • 예외(Throwable)
    • Call By Value와 Call By Reference
    • String, equals, StringBuffer
    • Thread와 비동기
  • 02 Spring
    • 02-01. Spring 동작 방식
    • @Autowired, @RequiredArgsConstructor
    • 인증(Authentication)과 인가(Authorization)
    • 트랜잭션(Transaction)
    • QueryDSL과 SQL Injection
    • SecurityContextHolder
    • @EqualsAndHashCode
  • 알고리즘과 자료구조
    • Set 자료구조
    • 정렬 알고리즘
    • 우선순위 큐 (Priority Queue)
    • DFS와 BFS
    • 힙(Heap) 자료구조
    • 스택(Stack)과 큐(Queue)
    • 암호화 알고리즘
    • LinkedList
    • 자료구조 - 해시 테이블(HashTable)
    • 자료구조 - ConcurrentHashMap
  • 데이터베이스
    • 기본
    • 인덱스 (Index)
    • 정규화 (Normalization)
    • 파티셔닝과 샤딩(Partitioning & Sharding)
    • 트랜잭션(Transaction)과 락(Lock)
    • 덤프(Dump)
    • Redis
    • 격리 수준(MySQL)
  • 네트워크
    • 전송 계층 (Transport Layer)
    • 네트워크 계층 (Network Layer)
    • Http와 Https
    • IP(Internet Protocol)
    • 프록시 서버
    • Http Protocol
    • 소켓(Socket)
    • 로드 밸런싱(Load Balancing)
  • 디자인 패턴
    • 전략 패턴 (Strategy Pattern)
    • 싱글톤 패턴 (Singleton Pattern)
    • 템플릿 메서드 패턴과 전략 패턴
    • 데코레이터 패턴 (Decorator pattern)
  • 웹
    • CORS 정책
    • 동시성 제어
    • N+1 문제
    • 웹 브라우저 동작원리
    • URI, URL, URN
    • 채팅 아키텍처 설계
  • 개발자
    • 개발 방법론 TDD
  • 운영체제
    • JIT & AOT 컴파일
    • 컨텍스트 스위칭(Context Switching)
    • 프로세스와 스레드
    • 싱글 스레드와 멀티 스레드
  • 코딩테스트
    • Stack / Queue (스택 / 큐)
    • Heap(우선 순위 큐)
    • DP(동적 계획법)
    • DFS(깊이 우선 탐색)
    • BFS(너비 우선 탐색)
    • Greedy(그리디 알고리즘)
    • 해시(Hash)
    • 투 포인터 알고리즘
    • Shortest path
    • 수학적 사고
Powered by GitBook
On this page
  • Q. DFS와 BFS의 기본 개념과 차이점에 대해서 설명해주세요
  • Q. DFS와 BFS의 시간 복잡도는 각각 어떻게 되며, 각각의 알고리즘이 적합한 상황은 언제인가요?
  • Q. DFS를 재귀적으로 구현할 때 주의해야 할 사항이 있나요?
  1. 알고리즘과 자료구조

DFS와 BFS

Q. DFS와 BFS의 기본 개념과 차이점에 대해서 설명해주세요

DFS는 깊이 우선 탐색이라고 하며 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 방식으로, 스택 또는 재귀를 사용합니다. BFS는 너비 우선 탐색이라고 하며 모든 인접 노드를 먼저 탐색한 후, 그 다음 레벨로 이동하는 방식으로, 큐를 사용합니다.


Q. DFS와 BFS의 시간 복잡도는 각각 어떻게 되며, 각각의 알고리즘이 적합한 상황은 언제인가요?

DFS를 인접 리스트를 사용하면 각 노드를 한 번씩 방문하고, 각 간선을 한 번씩 탐색하기 때문에 O(V+E) 의 시간복잡도를 가지며, BFS는 각 노드를 한 번씩 방문하고, 각 간석을 한 번씩 큐에 넣고 탐색하기 때문에 DFS와 동일한 시간 복잡도를 가집니다. DFS는 경로 탐색이나 사이클 검출과 같이 깊이를 우선으로 탐색하는 문제에 적합하고, BFS는 최단 경로 탐색이 적합합니다.


Q. DFS를 재귀적으로 구현할 때 주의해야 할 사항이 있나요?

DFS를 재귀적으로 구현할 때, 재귀호출이 너무 깊어지면 스택 오버플로우가 발생할 수 있습니다. 이 문제를 방지하기 위해, 재귀 깊이가 너무 깊어지지 않도록 문제의 범위를 제한하거나, 필요에 따라 반복문을 사용한 스택기반의 DFS 구현을 고려할 수 있습니다. 또한, 그래프의 노드가 많을 경우, 방문한 노드를 추적하기 위한 방문 배열이나 세트를 사용해 무한 재귀를 방지해야 합니다.

Previous우선순위 큐 (Priority Queue)Next힙(Heap) 자료구조

Last updated 8 months ago