본문 바로가기
코딩연습/DFS&BFS

[백준] 유기농 배추 (1012)(Kotlin)

by 유줘니 2020. 1. 20.

원본 문제 : https://www.acmicpc.net/problem/1012

참고 문제 : https://youjourney.tistory.com/124

 

<첫번째>

import java.io.*
import java.lang.System.*

var map: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var cnt: Int = 0
var axis_x = 0
var axis_y = 0

var dx = arrayListOf<Int>(-1,1,0,0)
var dy = arrayListOf<Int>(0,0,-1,1)

fun main() = with(BufferedReader(InputStreamReader(`in`))) {

    val list: MutableList<Int> = mutableListOf()

    repeat(readLine().toInt()) {

        val str = readLine().split(" ")

        axis_x = (str[0]+"").toInt()
        axis_y = (str[1]+"").toInt()

        map = Array(axis_x, { IntArray(axis_y) })
        visited = Array(axis_x, { BooleanArray(axis_y) })

        for ( i in 0 until axis_x ){
            for ( j in 0 until axis_y ){
                map[i][j] = 0
                visited[i][j] = false
            }
        }

        for ( i in 0 until (str[2]+"").toInt() ) {
            val coordinate = readLine().split(" ")
            map[(coordinate[0]+"").toInt()][(coordinate[1]+"").toInt()] = 1
        }

        for (i in 0 until axis_x) {
            for (j in 0 until axis_y) {
                if (map[i][j] == 1 && visited[i][j] == false) {
                    cnt = 1
                    dfs(i, j)
                    list.add(cnt)
                }
            }
        }

        println(list.size)
        list.clear()
    }


}

fun dfs(x: Int, y: Int): Int {
    visited[x][y] = true

    for (i in 0 until 4) {
        val nx = x + dx[i]
        val ny = y + dy[i]

        if (nx >= 0 && ny >= 0 && nx < axis_x && ny < axis_y) {
            if (map[nx][ny]==1 && visited[nx][ny]==false) {
                dfs(nx, ny)
                cnt++
            }
        }
    }
    return cnt
}

 

<두번째> 2020/06/08

import java.io.BufferedReader
import java.io.InputStreamReader

var matrix: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var mnk: IntArray = intArrayOf()

val dx = intArrayOf(1,-1,0,0)
val dy = intArrayOf(0,0,1,-1)

fun dfs(x: Int, y: Int) {
    visited[x][y] = true

    for (i in 0 until 4) {
        val nx = x + dx[i]
        val ny = y + dy[i]

        if (nx in 0 until mnk[0] && ny in 0 until mnk[1]) {
            if (matrix[nx][ny] != 0 && !visited[nx][ny]) {
                dfs(nx, ny)
            }
        }
    }
}

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {

    var cases: Int = readLine().toInt()
    val list = mutableListOf<Int>()

    repeat(cases) {
        var cnt = 0
        mnk = readLine()
                .split(" ")
                .map { it.toInt() }
                .toIntArray()

        matrix = Array(mnk[0]) { IntArray(mnk[1]) { 0 } }
        visited = Array(mnk[0]) { BooleanArray(mnk[1]) { false } }

        repeat(mnk[2]) {
            val xy = readLine()
                    .split(" ")
                    .map { it.toInt() }
                    .toIntArray()
            matrix[xy[0]][xy[1]] = 1
        }

        for (i in 0 until mnk[0]) {
            for (j in 0 until mnk[1]) {
                if (!visited[i][j] && matrix[i][j] != 0) {
                    cnt++
                    dfs(i, j)
                }
            }
        }

        list.add(cnt)
        
    }

    list.forEach { println(it) }

}

'코딩연습 > DFS&BFS' 카테고리의 다른 글

[백준] 단지번호붙이기 (2667)(Kotlin)  (0) 2020.01.20

댓글