개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • Books (13)
      • 읽기 좋은 코드가 좋은 코드다 (13)
    • Study (6)
      • Blockchain (3)
      • Algorithm (3)
    • Baekjoon (36)
    • Programmers (166)
    • LeetCode (15)
    • Open Source (1)
      • Youtube Popout Player (1)
    • Language (32)
      • Python (9)
      • JS (8)
      • Java (5)
      • HTML (6)
      • CSS (4)
    • Library & Framework (15)
      • React.js (15)
    • IDE (2)
      • IntelliJ (2)
    • Airdrop (9)
    • Tistory (2)
    • etc.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

  • 읽기 좋은 코드가 좋은 코드다
  • 카카오 알고리즘 문제
  • 카카오 공채
  • 파이썬
  • 2018 KAKAO BLIND RECRUITMENT
  • 카카오 코딩테스트
  • 백준
  • 프로그래머스 위클리 챌린지
  • 신규 코인 에어드랍
  • 코주비
  • 프로그래머스
  • 코인줍줍
  • programmers
  • 알고리즘문제풀이
  • 클린 코드 작성법
  • Java
  • 코딩테스트연습
  • Cozubi
  • Python
  • 클린 코드

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

[백준1260] DFS와 BFS / Java
Baekjoon

[백준1260] DFS와 BFS / Java

2020. 12. 28. 10:18
반응형

TITLE

문제주소 :www.acmicpc.net/submit/1260

 


<문제 설명>

문제

그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.

입력

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

출력

첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.

예제 입력 1

4 5 1
1 2
1 3
1 4
2 4
3 4

예제 출력 1

1 2 4 3
1 2 3 4

 

<풀이법>

▒ 한줄 개념: DFS & BFS ▒ 

DFS(깊이 우선 탐색) 과 BFS(너비 우선 탐색)의 개념에 대한 가장 기초적인 문제입니다.

DFS와 BFS의 개념에 대해 공부한다면 알고만 있다면 쉽게 풀 수 있는 문제인 것 같습니다.

 

자바로는 문제를 처음 풀어보다 보니 여러모로 코드가 좀 지저분하고 긴 면이 있는 것 같아서 추후 코드 수정이 필요할 것 같습니다.

<코드(Java)>

package Baekjoon;

import java.util.Scanner;
import java.util.Stack;
import java.util.LinkedList;
import java.util.Queue;

public class DFS_and_BFS_1260 {

    public static int vertices_num;
    public static int edges_num;
    public static int[][] matrix;
    public static boolean[] visited_dfs;
    public static boolean[] visited_bfs;
    public static int startVertex;
    public static Stack<Integer> stack = new Stack<>();
    public static Queue<Integer> queue = new LinkedList<>();

    public static void main(String[] args){
        System.out.println("Program Start.");

        Scanner sc = new Scanner(System.in);
        vertices_num = sc.nextInt()+1;
        edges_num = sc.nextInt();
        startVertex = sc.nextInt();

        matrix = new int[vertices_num][vertices_num];
        visited_dfs = new boolean[vertices_num];
        visited_bfs = new boolean[vertices_num];

        for(int i = 0; i< edges_num; i++){
            int head = sc.nextInt();
            int tail = sc.nextInt();
            matrix[head][tail] = 1;
            matrix[tail][head] = 1;
        }

        DFS(startVertex);
        System.out.println();
        BFS(startVertex);
    }

    public static void DFS(int startVertex){
        stack.push(startVertex);
        visited_dfs[startVertex] = true;
        while(!stack.empty()){
            int curVertex = stack.pop();
            System.out.print(curVertex+" ");
            for(int i = 0; i<vertices_num; i++){
                if(matrix[curVertex][i] == 1 && !visited_dfs[i]){
                    DFS(i);
                }
            }
        }
    }

    public static void BFS(int startVertex){
        queue.offer(startVertex);
        visited_bfs[startVertex] = true;
        while(!queue.isEmpty()){
            int curVertex = queue.poll();
            System.out.print(curVertex+ " ");
            for(int i = 0 ; i<vertices_num; i++){
                if(matrix[curVertex][i] == 1 && !visited_bfs[i]){
                    queue.offer(i);
                    visited_bfs[i] = true;
                }
            }
        }
    }
}

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형

'Baekjoon' 카테고리의 다른 글

[백준7578] 토마토 / Java  (0) 2020.12.29
[백준2178] 미로 탐색 / Java  (0) 2020.12.29
[백준1012] 유기농 배추 / Java  (0) 2020.12.28
[백준2667] 단지 번호 붙이기 / Java  (0) 2020.12.28
[백준2606] 바이러스 / Java  (0) 2020.12.28
    'Baekjoon' 카테고리의 다른 글
    • [백준2178] 미로 탐색 / Java
    • [백준1012] 유기농 배추 / Java
    • [백준2667] 단지 번호 붙이기 / Java
    • [백준2606] 바이러스 / Java
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바