ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 영역 구하기 kotlin
    코딩테스트📝 2022. 9. 20. 13:52
    import java.io.BufferedReader
    import java.io.InputStreamReader
    import java.util.StringTokenizer
    
    var count = 0
    
    fun blockChecker(map: Array<IntArray>, list: List<Int>) {
        for (i in list[1] until list[3]) {
            for (j in list[0] until list[2]) {
                map[i][j] = 1
            }
        }
    }
    
    fun areaDfs(map: Array<IntArray>, x: Int, y: Int, M: Int, N: Int) {
        map[y][x] = 1
        count++
        if (M > y+1 && map[y + 1][x] == 0) {
            areaDfs(map, x, y + 1,M, N)
        }
        if (y-1 >= 0 && map[y - 1][x] == 0) {
            areaDfs(map, x, y - 1,M, N)
        }
        if (N > x+1 && map[y][x + 1] == 0) {
            areaDfs(map, x + 1, y, M, N)
        }
        if (x-1 >= 0 && map[y][x - 1] == 0) {
            areaDfs(map, x - 1, y, M, N)
        }
    }
    
    fun areaCalculate(
        map: Array<IntArray>,
        M: Int,
        N: Int
    ): List<Int> {
        val list = mutableListOf<Int>()
    
        for(i in 0 until M) {
            for(j in 0 until N) {
                if (map[i][j] == 0) {
                    count = 0
                    areaDfs(map, j, i, M, N)
                    list.add(count)
                }
            }
        }
        list.sort()
        return list
    }
    
    fun main() {
        val br = BufferedReader(InputStreamReader(System.`in`))
        val (M, N, K) = br.readLine().split(" ").map { it.toInt() }
        val map = Array(M) { IntArray(N) }
    
        for (i in 0 until K) {
            val arr = br.readLine().split(" ").map { it.toInt() }
            blockChecker(map, arr)
        }
        val list = areaCalculate(map, M, N)
    
        val n = list.size
        println(n)
        for(i in 0 until n) {
            if(i != 0) {
                print(" ")
            }
            print(list[i])
        }
    }

    조언을 듣고 공부 방식을 바꿔보았는데

    오랜만에 재미있다....

    느려도 꾸준히갈 수 있도록 최대한 풀어보자

     

     

    일단 문제는 차분히 읽어보니 이해가 갔다.

     

    먼저 2차원 배열에 제시된 사각형을 1로 변경 후 섬의 개수 문제처럼 풀면 되는데

    다른 점은 전체의 면적이 아니라 각각의 면적을 구해야 하기 때문에 count를 리셋하고, 다시 세는 것을 반복해야 한다.

     

    아직 count의 위치를 어디에 둬야 할지 감이 잘 안 온다.

    그리고 부등호를 잘 못 놔서 ㅡㅡ 오래 걸렸다. 

Designed by Tistory.