[Do it! 알고리즘 코딩 테스트 자바] BFS 너비 우선 탐색 - 백준 1260(11일차)

2026. 3. 8. 22:15·Java

BFS (너비 우선 탐색)

  • 정의: 시작 정점에서 가장 가까운 정점부터 먼저 방문하고, 멀리 떨어져 있는 정점을 나중에 방문하는 그래프 탐색 알고리즘.
  • 핵심 원리:
    • 선입선출(FIFO) 방식의 큐(Queue) 자료구조 활용.
    • 현재 노드와 인접한 모든 미방문 노드를 큐에 삽입하며 레벨 단위로 탐색 진행.
    • 중복 탐색을 막기 위해 노드를 큐에 삽입하기 직전(혹은 직후) 방문(visited) 여부 체크 필수.

DFS와 BFS의 차이점

  • 탐색 방식: DFS는 한 우물을 끝까지 파고드는 방식(깊이 우선), BFS는 얕고 넓게 모든 방향을 고르게 탐색하는 방식(너비 우선).
  • 자료구조: DFS는 스택(Stack) 또는 재귀 호출 사용, BFS는 큐(Queue) 사용.
  • 주요 용도: DFS는 모든 경로 탐색, 백트래킹, 사이클 판별에 유리함. BFS는 최단 거리(가중치가 1일 때), 최소 횟수 찾기 등에 유리함.
  • 방문 처리 시점: DFS는 해당 노드를 방문(재귀 진입)했을 때 처리, BFS는 큐에 넣을 때 방문 처리하여 중복 삽입 방지.

[1260번: DFS와 BFS]

  • 고려 내용: 하나의 그래프를 DFS와 BFS로 각각 탐색하고 결과를 출력하는 방법. 방문할 수 있는 정점이 여러 개인 경우 정점 번호가 작은 것부터 방문하기 위한 사전 정렬 작업.
  • 문제 핵심: 각 알고리즘에 맞는 자료구조(재귀/큐)의 정확한 활용 및 방문 체크(visited) 배열의 초기화와 적용 시점 이해.
  • 최적화 및 고려사항:
    • 비효율적인 BFS 설계: 큐와 반복문을 쓰지 않고 재귀를 이용해 BFS를 구현하려다 탐색 순서가 꼬이고 무한 루프 발생 가능성 존재. -> 큐(Queue) 자료구조 도입: while(!queue.isEmpty()) 구조를 사용하여 표준적인 너비 우선 탐색 로직 구현.
    • 방문 처리 시점 지연: 큐에서 노드를 꺼낼 때(poll) 방문 처리를 하면 큐에 동일한 노드가 중복으로 들어가는 메모리, 시간 낭비 발생. -> 삽입 시점 방문 처리: 인접 노드를 탐색하고 큐에 삽입하는 순간(queue.add(next)) 즉시 방문 처리(visited[next] = true)하여 중복 방지.
    • 부정확한 결과 저장 방식: 고정 길이 배열(int[] BFS_result = new int[S])에 결과를 저장하고 순회 출력 시, 미방문 정점의 빈자리(0)까지 출력되어 오답 처리됨. -> 동적 결과 저장 체계: 탐색 즉시 StringBuilder나 ArrayList에 노드 번호를 기록하여, 방문한 노드만 정확한 순서대로 출력하도록 메모리 및 출력 방식 최적화.
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Do it! 알고리즘 코딩 테스트 자바] 그리디 알고리즘, 소수 구하기, 유클리드 호제법, 그래프 [13~18일차]  (1) 2026.03.15
[Do it! 알고리즘 코딩 테스트 자바] 이진 탐색 (12일차)  (0) 2026.03.08
[Do it! 알고리즘 코딩 테스트 자바] 백트래킹을 써야하는 이유(feat.DFS) - 백준 11724/2023/13023/15649/9663(10일차)  (0) 2026.03.08
[Do it! 알고리즘 코딩 테스트 자바] 병합정렬과 기수정렬 - 백준 2751 / 1517 / 10989(9일차)  (0) 2026.03.06
[Do it! 알고리즘 코딩 테스트 자바] 삽입 정렬과 퀵 정렬 - 백준 11399 / 11004(8일차)  (0) 2026.03.02
'Java' 카테고리의 다른 글
  • [Do it! 알고리즘 코딩 테스트 자바] 그리디 알고리즘, 소수 구하기, 유클리드 호제법, 그래프 [13~18일차]
  • [Do it! 알고리즘 코딩 테스트 자바] 이진 탐색 (12일차)
  • [Do it! 알고리즘 코딩 테스트 자바] 백트래킹을 써야하는 이유(feat.DFS) - 백준 11724/2023/13023/15649/9663(10일차)
  • [Do it! 알고리즘 코딩 테스트 자바] 병합정렬과 기수정렬 - 백준 2751 / 1517 / 10989(9일차)
미우딩
미우딩
다양한 프로그래밍 언어를 공부하고 있는 공대생입니다! Python, Java, C언어를 주로 공부하고 있으며 Figma를 통한 디자인도 종종 올릴 예정입니다.
  • 미우딩
    미우의 코딩 기록
    미우딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Java (47)
      • C언어 (0)
      • 대외활동 (5)
      • Spring (4)
      • 프로젝트 (2)
      • 앱개발 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IT #코딩테스트 #알고리즘 #투포인터 #시간제한 #Scanner #BufferedReader #StringTokenizer
    IT #알고리즘 #코딩테스트 #DFS
    IT #백준 #코딩테스트 #알고리즘 #구간합 #반복문
    IT #알고리즘 #코딩테스트 #우선순위큐 #힙 #절댓값 #오름차순 #정렬
    android #java #kotlin #compose
    IT #코딩테스트 #알고리즘 #DFS #재귀함수 #무방향그래프
    IT #코딩테스트 #알고리즘 #백준 #투포인터 #배열
    IT #알고리즘 #코딩테스트 #선택정렬 #내림차순정렬 #최댓값
    IT #코딩테스트 #이진탐색 #알고리즘
    IT #알고리즘 #코딩테스트 #퀵정렬 #오름차순정렬
    BufferedReader
    IT #BFS #코딩테스트 #구현 #큐 #재귀함수
    java #android #개발자
    IT #코딩테스트 #알고리즘 #버블정렬 #오름차순
    IT #코딩테스트 #알고리즘 #슬라이딩윈도우 #투포인터 #함수
    IT #알고리즘 #코딩테스트 #삽입정렬 #오름차순정렬
    android #java #kotlin #상태관리
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #평균구하기
    IT #코딩테스트 #알고리즘 #스택 #
    Spring #정적컨텐츠 #MVC #템플릿엔진 #API #애너테이션
    push #pop #StringBuffer
    IT #알고리즘 #그리디알고리즘 #탐욕알고리즘 #코테
    IT #큐 #알고리즘 #코딩테스트 #자바 #선입선출
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #아스키코드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미우딩
[Do it! 알고리즘 코딩 테스트 자바] BFS 너비 우선 탐색 - 백준 1260(11일차)
상단으로

티스토리툴바