[백준] 미로 만들기 (1347)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 홍준이가 적은 내용의 길이가 주어진다. 길이는 0보다 크고, 50보다 작다. 둘째 줄에 그 내용이 주어진다.
» 출력
첫째 줄에 미로 지도를 출력한다. ‘.’은 이동할 수 있는 칸이고, ‘#’는 벽이다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
5 RRFRF |
.. .# |
문제 풀이1
import kotlin.math.abs
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val dx = intArrayOf(0, -1, 0, 1)
val dy = intArrayOf(-1, 0, 1, 0)
val n = readLine().toInt()
val move = readLine()
val x = mutableListOf<Int>(0)
val y = mutableListOf<Int>(0)
var prevX = 0
var prevY = 0
var prevD = 0
move.forEach {
when (it) {
'L' -> prevD = if (prevD - 1 < 0) 3 else prevD - 1
'R' -> prevD = if (prevD + 1 > 3) 0 else prevD + 1
'F' -> {
prevX += dx[prevD]
prevY += dy[prevD]
x.add(prevX)
y.add(prevY)
}
}
}
val xMin = x.minOf { it }
val xMax = x.maxOf { it }
val yMin = y.minOf { it }
val yMax = y.maxOf { it }
val xShift = if(xMin < 0) abs(xMin) else 0
val yShift = if(yMin < 0) abs(yMin) else 0
val map = Array(yMax - yMin + 1) { BooleanArray(xMax - xMin + 1) { false } }
for (i in x.indices) {
map[y[i] + yShift][x[i] + xShift] = true
}
for (i in map.size - 1 downTo 0) {
println(map[i].joinToString("") { if (it) "." else "#" })
}
}
문제 풀이2
import kotlin.math.abs
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val dx = intArrayOf(0, -1, 0, 1)
val dy = intArrayOf(-1, 0, 1, 0)
val n = readLine().toInt()
val move = readLine()
val x = mutableListOf<Int>(0)
val y = mutableListOf<Int>(0)
var prevX = 0
var prevY = 0
var prevD = 0
move.forEach {
when (it) {
'L' -> prevD = (prevD + 3) % 4
'R' -> prevD = (prevD + 1) % 4
'F' -> {
prevX += dx[prevD]
prevY += dy[prevD]
x.add(prevX)
y.add(prevY)
}
}
}
val xMin = x.minOf { it }
val xMax = x.maxOf { it }
val yMin = y.minOf { it }
val yMax = y.maxOf { it }
val xShift = if(xMin < 0) abs(xMin) else 0
val yShift = if(yMin < 0) abs(yMin) else 0
val map = Array(yMax - yMin + 1) { BooleanArray(xMax - xMin + 1) { false } }
for (i in x.indices) {
map[y[i] + yShift][x[i] + xShift] = true
}
for (i in map.size - 1 downTo 0) {
println(map[i].joinToString("") { if (it) "." else "#" })
}
}