문제 링크
문제 해설
뒤로가기 목록을 저장할 스택과 앞으로가기 목록을 저장할 큐를 각각 만들면 손쉽게 해결할 수 있다. 본 코드에서는 덱을 사용했지만 크게 상관은 없다고 생각한다.
압축 기능은 뒤로가기 목록의 2번째 페이지부터 마지막 페이지까지 이동하면서 이전 페이지와 같으면 제거하는 식으로 구현했다.
Code
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
val (n, q) = readLine().split(' ').map { it.toInt() }
val back = ArrayDeque<Int>()
val front = ArrayDeque<Int>()
var current = 0
for (i in 1..q) {
val st = StringTokenizer(readLine())
when (st.nextToken()) {
"B" -> {
if (back.isEmpty()) continue
else {
front.addFirst(current)
current = back.removeLast()
}
}
"F" -> {
if (front.isEmpty()) continue
else {
back.addLast(current)
current = front.removeFirst()
}
}
"A" -> {
front.clear()
if (current != 0) back.addLast(current)
current = st.nextToken().toInt()
}
"C" -> {
var j = 1
while (j < back.size) {
if (back[j - 1] == back[j]) {
back.removeAt(j--)
}
j++
}
}
}
}
bw.write("$current\n")
bw.write("${back.takeIf { it.isNotEmpty() }?.reversed()?.joinToString(" ") ?: -1}\n")
bw.write("${front.takeIf { it.isNotEmpty() }?.joinToString(" ") ?: -1}")
bw.close()
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 1629 : 곱셈 (0) | 2023.02.02 |
---|---|
[Kotlin] 백준 25306 : 연속 XOR (0) | 2023.01.29 |
[Kotlin] 백준 26597 : 이 사람 왜 이렇게 1122를 좋아함? (0) | 2023.01.25 |
[Kotlin] 백준 11444 : 피보나치 수 6 (2) | 2023.01.24 |
[Kotlin] 백준 23309 : 철도 공사 (0) | 2023.01.19 |
댓글