본문 바로가기
코딩테스트 준비(kotlin)/DFS, BFS

[kotlin] 백준 1280 DFS와 BFS

by 1chanhue1 2023. 10. 27.
package com.example.codingtest

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.LinkedList
import java.util.Queue
import java.util.Stack


fun main() {


    val br = BufferedReader(InputStreamReader(System.`in`))



    val (n, m,v) = readLine()!!.split(" ").map { it.toInt() }



    val graph = Array(1001, { IntArray(10001, { 0 }) })
    // Array(크기, {IntArray(크기, {초기화 값})}

    val visited = BooleanArray(n + 1)
    visited.fill(false)

    for (i in 1..m) {
        val (x, y) = readLine()!!.split(" ").map { it.toInt() }
        graph[x][y] = 1 //연결되어있음을 표시
        graph[y][x] = 1 //연결되어있음을 표시
    }

    val stack=Stack<Int>()

    stack.push(v)
    visited[v]=true
    val sb=StringBuilder()

    sb.append("${v} ")

    while(stack.isNotEmpty()){ // 스택이 빌떄까지
        val peek_v=stack.peek()
        var check=1
        for(i in 1..n){
            if((graph[peek_v][i]==1)&&(visited[i]!=true)){
                stack.push(i)
                visited[i]=true
                check=0
                sb.append("${i} ")

                break
            }
        }
        if(check==1){
            stack.pop()

        }


    }

    println(sb.toString())
    sb.setLength(0);



    visited.fill(false)
    var queue: Queue<Int> = LinkedList() // 큐로 선언하고 LinkedList 로 할당
    queue.add(v)

    visited[v] = true
    sb.append("${v} ")

    while (queue.isNotEmpty()) { // 스택이 빌떄까지.
        val peek_v = queue.poll() // 1 검사
        for (i in 1..n) {
            if ((graph[peek_v][i] == 1) && (visited[i] != true)) {
                queue.add(i)
                visited[i] = true
                sb.append("${i} ")


            }
        }


    }
    print(sb.toString())

}