반응형

백준 2897번 문제입니다. (solved.ac) 기준 브론즈 1 문제입니다.

https://www.acmicpc.net/problem/2897

 

2897번: 몬스터 트럭

출력은 다섯 줄이다. 첫째 줄에는 해빈이가 아무 차도 부수지 않으면서 주차할 수 있는 공간의 개수, 둘째 줄은 차 한 대를 부수고 주차할 수 있는 공간의 개수, 셋째 줄은 차 두 대, 넷째 줄은 차

www.acmicpc.net

문제

문제 접근

아주 단순한 브루트 포스 문제라고 생각하고 완전탐색을 구현했습니다. 완전탐색으로 2 * 2 크기의 배열을 확인해보고 탐색한 공간에 #가 존재한다면 주차를 할 수 없는 공간, #존재한다면 #의 개수만큼 부수고 주차할 공간이라고 판단하고 각각의 경우를 카운트할 변수를 만들어서 구현했습니다.

정답 코드

/**
 * 입/출력 관련
 * - 지도는 R행 C열
 * - `#`은 빌딩 `X`는 주차된 차, `.`은 빈 주차공간
 * - 혜빈이의 차는 2행 2열의 칸을 차지해야함.
 *
 * 요구사항
 * - 가능한 주차 공간을 해빈이가 부숴야하는 차의 수대로 모아서 보여주자.
 * - 주차하기 위해 부숴야하는 차만 고려.(주차하러 가는 길에 부수는 차는 신경 X)
 * - 빌딩이 있는 곳은 주차를 할 수 없음.
 *
 * 아이디어
 * - 간단한 브루트 포스인듯.
 * - 모든 행,열을 2x2로 조사하여 빌딩이 있다면 넘어가고
 *   그렇지 않다면 주차하는 경우를 부숴야하는 수의 경우에 따라 판단.
 */

var dontNeedToBreak = 0
var needToBreakOne = 0
var needToBreakTwo = 0
var needToBreakThree = 0
var needToBreakFour = 0

fun main() {

    val (row, col) = readln().split(" ").map { it.toInt() }
    val parkingLot = mutableListOf<String>()

    repeat(row) {
        val c = readln()
        parkingLot.add(c)
    }

    for (r in 0..row - 2) {
        for (c in 0..col - 2) {
            val curPos = parkingLot[r][c]
            val rightPos = parkingLot[r + 1][c]
            val downPos = parkingLot[r][c + 1]
            val rightAndDownPos = parkingLot[r + 1][c + 1]
            checkParkingLot(curPos, rightPos, downPos, rightAndDownPos)
        }
    }

    println(dontNeedToBreak)
    println(needToBreakOne)
    println(needToBreakTwo)
    println(needToBreakThree)
    println(needToBreakFour)

}

fun checkParkingLot(vararg posList: Char) {

    posList.find { it == '#' }?.let { return }

    when (posList.count { it == 'X' }) {
        0 -> dontNeedToBreak++
        1 -> needToBreakOne++
        2 -> needToBreakTwo++
        3 -> needToBreakThree++
        4 -> needToBreakFour++
    }
}

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기