반응형
백준 2897번 문제입니다. (solved.ac) 기준 브론즈 1 문제입니다.
https://www.acmicpc.net/problem/2897
문제
문제 접근
아주 단순한 브루트 포스 문제라고 생각하고 완전탐색을 구현했습니다. 완전탐색으로 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++
}
}
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 1895번 필터(브루트 포스 - 완전 탐색)[Kotlin - 코틀린] (2) | 2022.09.13 |
---|---|
[백준] 5555번 반지(브루트 포스 - 완전 탐색)[Kotlin - 코틀린] (0) | 2022.09.13 |
[백준] 2941번 크로아티아 알파벳[Kotlin - 코틀린] (0) | 2022.07.13 |
[백준] 14225번 부분수열의 합(브루트포스 - DFS)[Kotlin - 코틀린] (0) | 2022.07.07 |
[백준] 1759번 암호 만들기(깊이우선탐색 - DFS)[Kotlin - 코틀린] (0) | 2022.07.07 |
최근댓글