[백준] 1012번: 유기농 배추 - Kotlin[코틀린]

2023. 8. 4. 20:15·알고리즘/Baekjoon

문제

 

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 


풀이

 

 각각의 테스트 케이스마다 입력받은 graph를 DFS, BFS로 탐색한 결과를 출력해주면 된다.

 

 graph는 false로 초기화되어 있는 BooleanArray를 선언한다. 입력받은 좌표는 true로 바꿔준다. for문을 통해 graph의 좌표가 true이면 DFS, BFS 함수를 실행해주고 cnt를 +1 해준다. 이후 cnt를 출력해주면 된다.

 


코드

 

- BFS

import java.util.*

data class Point(val x: Int, val y: Int)

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

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

    val testCase = br.readLine().toInt()

    repeat(testCase) {
        var st = StringTokenizer(br.readLine())
        val (rows, cols, num) = arrayOf(st.nextToken().toInt(), st.nextToken().toInt(), st.nextToken().toInt())
        val graph = Array(rows){ BooleanArray(cols) }
        var cnt = 0

        repeat(num) {
            st = StringTokenizer(br.readLine())
            graph[st.nextToken().toInt()][st.nextToken().toInt()] = true
        }

        fun bfs(x: Int, y: Int) {
            val queue : Queue<Point> = LinkedList()
            queue.add(Point(x, y))
            graph[x][y] = false

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

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

                    if(nx < 0 || nx >= rows || ny < 0 || ny >= cols) continue

                    if(graph[nx][ny]) {
                        graph[nx][ny] = false
                        queue.add(Point(nx, ny))
                    }
                }
            }
        }

        for(i in 0 until rows) {
            for(j in 0 until cols) {
                if(graph[i][j]) {
                    cnt++
                    bfs(i, j)
                }
            }
        }

        bw.append("$cnt\n")
    }

    bw.write("")
    bw.flush()
    bw.close()
    br.close()
}

 

- DFS

import java.util.*

data class Point(val x: Int, val y: Int)

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

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

    val testCase = br.readLine().toInt()

    repeat(testCase) {
        var st = StringTokenizer(br.readLine())
        val (rows, cols, num) = arrayOf(st.nextToken().toInt(), st.nextToken().toInt(), st.nextToken().toInt())
        val graph = Array(rows){ BooleanArray(cols) }
        var cnt = 0

        repeat(num) {
            st = StringTokenizer(br.readLine())
            graph[st.nextToken().toInt()][st.nextToken().toInt()] = true
        }

        fun dfs(x: Int, y: Int) {
            graph[x][y] = false

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

                if(nx < 0 || nx >= rows || ny < 0 || ny >= cols) continue

                if(graph[nx][ny]) {
                    dfs(nx, ny)
                }
            }
        }

        for(i in 0 until rows) {
            for(j in 0 until cols) {
                if(graph[i][j]) {
                    cnt++
                    dfs(i, j)
                }
            }
        }

        bw.append("$cnt\n")
    }

    bw.write("")
    bw.flush()
    bw.close()
    br.close()
}

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 10773번: 제로 - Kotlin[코틀린]  (0) 2023.08.07
[백준] 2438 ~ 2446번: 별 찍기 - 1 ~ 9 - Kotlin[코틀린]  (0) 2023.08.05
[백준] 11399번: ATM - Kotlin[코틀린]  (0) 2023.08.01
[백준] 2606번: 바이러스 - Kotlin[코틀린]  (0) 2023.07.31
[백준] 2583번: 영역 구하기 - Kotlin[코틀린]  (0) 2023.07.27
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 10773번: 제로 - Kotlin[코틀린]
  • [백준] 2438 ~ 2446번: 별 찍기 - 1 ~ 9 - Kotlin[코틀린]
  • [백준] 11399번: ATM - Kotlin[코틀린]
  • [백준] 2606번: 바이러스 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      그래프이론
      수학
      투 포인터
      백트래킹
      우선순위 큐
      프림
      누적 합
      크루스칼
      에라토스테네스의 체
      그래프 탐색
      스택
      MST
      모듈러 곱셈 역원
      분리집합
      dfs
      문자열
      티스토리
      DP
      브루트포스
      BFS
      그리디
      이분 탐색
      정렬
      분할 정복
      피보나치
      소수 판정
      구현
      재귀
      유니온파인드
      큐
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 1012번: 유기농 배추 - Kotlin[코틀린]
    상단으로

    티스토리툴바