[백준] 1743번: 음식물 피하기 - Kotlin[코틀린]

2023. 12. 21. 23:55·알고리즘/Baekjoon

문제

 

 

1743번: 음식물 피하기

첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다.  그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다

www.acmicpc.net

 


풀이

 

 입력받은 좌표에 음식물을 표시하고, BFS 탐색을 통해 음식물의 크기를 계산하여 풀이하면 된다.

 

 BFS 함수에서는 Queue에서 좌표를 추가할 때마다 갯수를 세어준다. 그리고 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 (rows, cols, num) = br.readLine().split(' ').map { it.toInt() }
    val map = Array(rows){ BooleanArray(cols) }

    repeat(num) {
        with(StringTokenizer(br.readLine())) {
            map[nextToken().toInt() - 1][nextToken().toInt() - 1] = true
        }
    }

    fun bfs(x: Int, y: Int): Int {
        val queue : Queue<Point> = LinkedList()
        queue.offer(Point(x, y))
        map[x][y] = false
        var res = 1

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

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

                if(nx < 0 || nx >= rows || ny < 0 || ny >= cols) continue
                if(!map[nx][ny]) continue

                map[nx][ny] = false
                queue.add(Point(nx, ny))
                res++
            }
        }

        return res
    }

    var ans = 0

    for(i in 0 until rows) {
        for(j in 0 until cols) {
            if(map[i][j]) {
                ans = maxOf(ans, bfs(i, j))
            }
        }
    }

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

 

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

[백준] 10826번: 피보나치 수 4 - Kotlin[코틀린]  (1) 2023.12.28
[백준] 2578번: 빙고 - Kotlin[코틀린]  (0) 2023.12.27
[백준] 1965번: 상자넣기 - Kotlin[코틀린]  (0) 2023.12.20
[백준] 10451번: 순열 사이클 - Kotlin[코틀린]  (0) 2023.12.19
[백준] 1072번: 게임 - Kotlin[코틀린]  (0) 2023.12.19
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 10826번: 피보나치 수 4 - Kotlin[코틀린]
  • [백준] 2578번: 빙고 - Kotlin[코틀린]
  • [백준] 1965번: 상자넣기 - Kotlin[코틀린]
  • [백준] 10451번: 순열 사이클 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    티스토리툴바