ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ1036 성지키기
    Algorithm 2024. 11. 27. 23:05

    Overview

    Solution

    • 경비원이 없는 행과 열의 갯수를 구한 후 그 중 최대값을 출력한다.
    • 모든 행에 한개씩 채우고, 나머지 열에 한개씩 채우는 것이 경비원의 최소값이므로, 행과 열중 큰 값이 정답이 된다. 

    Solution1 

    • 이중 포문으로 각 행에 경비원이 포함되었는지 확인하고 총 행 수에서 경비원수를 뺀다.
    fun main() {
        val br = BufferedReader(InputStreamReader(System.`in`))
        val (n, m) = br.readLine().split(" ").map { it.toInt() }
        val array: Array<CharArray> = Array(n) {
            br.readLine().toCharArray()
        }
        br.close()
    
        val (nonIncludedRow, nonIncludedCol) = solution1(array, m, n)
        println(max(nonIncludedRow, nonIncludedCol))
    }
    
    private fun solution1(
        array: Array<CharArray>,
        m: Int,
        n: Int
    ): Pair<Int, Int> {
        var includedRow = 0
        for (row in array) {
            for (i in 0 until m) {
                if (row[i] == 'X') {
                    includedRow++
                    break
                }
            }
        }
        val nonIncludedRow = n - includedRow
    
        var includedCol = 0
        for (j in 0 until m) {
            for (i in 0 until n) {
                if (array[i][j] == 'X') {
                    includedCol++
                    break
                }
            }
        }
        val nonIncludedCol = m - includedCol
        return Pair(nonIncludedRow, nonIncludedCol)
    }

     

    Solution2

    • 1처럼 행/열 각각 도는게 아니라 한번에 돌면서 경비원이 있는 행/열인지 체크해서 계산한다. 
    private fun solution2(
        array: Array<CharArray>,
        m: Int,
        n: Int
    ): Pair<Int, Int> {
        val includedRow = BooleanArray(n)
        val includedCol = BooleanArray(m)
    
        for (i in 0 until n) {
            for (j in 0 until m) {
                if (array[i][j] == 'X') {
                    includedRow[i] = true
                    includedCol[j] = true
                }
            }
        }
    
        var nonIncludedRowCount = n
        for (i in 0 until n) {
            if (includedRow[i]) {
                nonIncludedRowCount--
            }
        }
    
        var nonIncludedColCount = m
        for (i in 0 until m) {
            if (includedCol[i]) {
                nonIncludedColCount--
            }
        }
    
        return Pair(nonIncludedRowCount, nonIncludedColCount)
    }

    'Algorithm' 카테고리의 다른 글

    BOJ3273 두수의 합  (1) 2024.12.02
    BOJ10989 수 정렬하기3  (0) 2024.12.01
    BOJ10431 줄세우기  (0) 2024.11.30
    BOJ10158 개미  (0) 2024.11.27
Designed by Tistory.