[백준/코틀린] 5430번: AC
골드 5
링크
풀이
배열을 실제로 뒤집으면 R 명령마다 O(n)이 소요되어 시간 초과가 발생합니다.
대신 뒤집힘 여부만 플래그로 관리하고,
D 명령 시 플래그 상태에 따라 앞 또는 뒤에서 원소를 제거합니다.
덱(Deque)을 사용하면 양쪽 끝에서 O(1)에 삽입/삭제가 가능하므로,
모든 명령을 효율적으로 처리할 수 있습니다.
최종 출력 시 뒤집힘 상태를 반드시 반영해야 합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
fun main() = repeat(readln().toInt()) {
val p = readln()
val n = readln().toInt()
val t = readln()
val x = when (n) {
0 -> emptyList()
else -> t.drop(1).dropLast(1).split(",").map { it.toInt() }
}
var r = false
val deque = ArrayDeque(x)
p.forEach {
when (it) {
'R' -> r = !r
'D' -> when {
deque.isEmpty() -> return@repeat println("error")
r -> deque.removeLast()
!r -> deque.removeFirst()
}
}
}
println(
when (r) {
false -> deque
true -> deque.reversed()
}.joinToString(",", "[", "]")
)
}
This post is licensed under CC BY 4.0 by the author.