[Java- Algorithm] 너비 우선 탐색법(BFS과 큐(Queue)

2024. 2. 28. 00:08·JAVA-기초/JAVA기본
728x90
반응형
SMALL

너비 우선 탐색법(BFS)이란?

 

Breadth-First-Search-Algorithm

 

File:Breadth-First-Search-Algorithm.gif - Wikimedia Commons

No higher resolution available.

commons.wikimedia.org

위의 GIF는 BFS이고 아래는 DFS이다. 차이점을 먼저 확인해보자.

https://en.m.wikipedia.org/wiki/File:Depth-First-Search.gif

 

✅공통점
방문 여부 확인을 통해 한 번 지나간 노드는 다시 방문하지 않는다.



✅차이점

DFS는 정점(1)에서 연결된 노드를 순서대로 아래로 내려가며 다음 노드가 없는 경우 다음 연결된 노드로 이동하며 탐색한다.
또한 재귀호출 및 스택방식으로 코드를 구현한다.

BFS는 같은 레벨(가장 가까운 노드)에서 검색을 시작하며 최단 거리를 탐색한다.
큐 방식으로 코드를 구현한다.
배열에서 사용하는 경우 방향 데이터를 이용해 시작점의 범위를 넓혀가면서 탐색한다.
DFS는 무한한길이를 가진 경로가 존재하고 목표는 다른 경로에 있을 경우 해결하지 못하지만 BFS는 모든 경로를 동시에 탐색하기 때문에 다른 경로의 목표에 접근이 가능하다.


하지만 BFS도 경로의 길이가 매우 길고 목표로 하는 노드가 가장 마지막에 있다면 메모리를 많이 요구하고, 효율도 좋지 못한 방법이 됩니다.

 

 

예시 

 

Do it !자바 알고리즘

 

 

Queue방식으로 데이터가 삽입되는 것을 아래의 그림에서 확인할 수 있습니다.

Do it !자바 알고리즘

 

이 내용을 공부하고나서 백준문제를 풀어볼건데요 

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

풀이도 곧 포스팅하겠습니다!

728x90
반응형
SMALL

'JAVA-기초 > JAVA기본' 카테고리의 다른 글

[Java] hashCode와 Equals를 함께 재정의하는 이유  (1) 2024.03.17
[자료구조 - Graph 와 DFS] Graph와 DFS란?  (0) 2024.02.24
자바(java) - Optional이란?  (2) 2023.12.06
[Java] 객체지향개념(OOP) 캡슐화와 정보은닉  (3) 2023.09.03
객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙  (64) 2023.08.12
'JAVA-기초/JAVA기본' 카테고리의 다른 글
  • [Java] hashCode와 Equals를 함께 재정의하는 이유
  • [자료구조 - Graph 와 DFS] Graph와 DFS란?
  • 자바(java) - Optional이란?
  • [Java] 객체지향개념(OOP) 캡슐화와 정보은닉
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바 면접
      redis 채팅
      java
      JSP
      springsecurity
      Til
      spring redis
      레디스
      자바 반복문
      프로그래머스
      redis
      Springframework
      자바
      리눅스마스터2급정리
      자바스크립트
      jsp request
      리눅스마스터2급
      스프링프레임워크
      JS
      HTML
      자바 면접질문
      리눅스
      Spring Data Redis
      Spring
      자바 알고리즘
      jsp기초
      자바기초
      백준
      CSS
      JavaScript
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [Java- Algorithm] 너비 우선 탐색법(BFS과 큐(Queue)
    상단으로

    티스토리툴바