윤굥굥
yg323
윤굥굥
전체 방문자
오늘
어제
  • 굥굥 DEV
    • Computer Science
      • 자료구조 및 알고리즘
      • 운영체제
      • 네트워크
      • 데이터베이스
    • Programming Language
      • Java
      • Kotlin
    • Android
      • with Kotlin
    • Algorithm
      • with Kotlin
    • 하나씩 습득하는 중

블로그 메뉴

  • ↓백준 모아보기 ↓
  • 💚 플레티넘 문제 모아보기
  • 💛 골드 문제 모아보기
  • 🤍 실버 문제 모아보기
  • 🤎 브론즈 문제 모아보기

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
윤굥굥
Algorithm/with Kotlin

[백준][코틀린] 1260 DFS와 BFS

Algorithm/with Kotlin

[백준][코틀린] 1260 DFS와 BFS

2022. 1. 28. 11:21

문제 내용

문제

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

입력

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

출력

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

예제 입력 예제 출력
4 5 1
1 2
1 3
1 4
2 4
3 4
1 2 4 3
1 2 3 4 
5 5 3
5 4
5 2
1 2
3 4
3 1
3 1 2 5 4
3 1 4 2 5
1000 1 1000
999 1000
1000 999
1000 999

 

문제 풀이

DFS는 스택으로 풀이를 진행하였고, BFS는 큐를 이용하여 풀이를 진행하였습니다! 

</>̆̈ 코드

import java.io.*
import java.lang.StringBuilder
import java.util.*

var graph = arrayOf<IntArray>()
var visited = booleanArrayOf()

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (n, m, v) = this.readLine().split(" ").map { it.toInt() }
    graph = Array(n) {IntArray(n)}
    visited = BooleanArray(n)

    repeat(m) {
        val (x, y) = this.readLine().split(" ").map { it.toInt() }
        graph[x-1][y-1] = 1
        graph[y-1][x-1] = 1
    }

    visited.fill(false)
    println(dfs(n, v-1).trimEnd())

    visited.fill(false)
    println(bfs(n, v-1).trimEnd())
}

private fun dfs(n: Int, v: Int): String {
    val sb = StringBuilder()
    visited[v] = true
    sb.append("${v+1} ")

    for (i in 0 until n) if (graph[v][i] == 1 && !visited[i]) sb.append(dfs(n, i))

    return sb.toString()
}

private fun bfs(n: Int, v: Int): String {
    val sb = StringBuilder()
    val list = LinkedList<Int>()

    list.add(v); visited[v] = true
    sb.append("${v+1} ")

    while (list.isNotEmpty()) {
        val cur = list.poll()

        for (i in 0 until n) {
            if (graph[cur][i] == 1 && !visited[i]) {
                list.add(i); visited[i] = true
                sb.append("${i+1} ")
            }
        }
    }

    return sb.toString()
}

링크

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

저작자표시 비영리 변경금지 (새창열림)
  • 문제 내용
  • 문제 풀이
  • </>̆̈ 코드
  • 링크
'Algorithm/with Kotlin' 카테고리의 다른 글
  • [백준][코틀린] 2751 수 정렬하기 2
  • [백준][코틀린] 1181 단어 정렬
  • [백준][코틀린] 11050 이항 계수 1
  • [백준][코틀린] 1259 팰린드롬수
윤굥굥
윤굥굥

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.