알고리즘/백준
[백준] 1874번 : 스택 수열 - 코틀린(kotlin)
Junuuu
2022. 11. 10. 00:01
반응형
https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
문제 해석
1~n까지의 수를 스택에 넣을 수 있다.
어떠 수열이 주어졌을 때 push, pop연산으로 스택을 이용하여 해당 수열을 만들 수 있는지 알아내 보자.
예시 수열 : 4 3 6 8 7 5 2 1
1~8까지의 수가 존재함
push : 1
push : 1 2
push : 1 2 3
push : 1 2 3 4
pop : 1 2 3 (수열 4)
pop : 1 2 (수열 4 3)
push : 1 2 5
push : 1 2 5 6
pop : 1 2 5 (수열 4 3 6)
push : 1 2 5 7 (수열 4 3 6)
push : 1 2 5 7 8 (수열 4 3 6)
pop : 1 2 5 7 (수열 4 3 6 8 )
pop : 1 2 5 (수열 4 3 6 8 7)
pop : 1 2 (수열 4 3 6 8 7 5)
pop : 1 (수열 4 3 6 8 7 5 2)
pop : (수열 4 3 6 8 7 5 2)
수열 만들어짐
코드
import java.util.*
fun main() {
val count = readLine()!!.toInt()
val stack = Stack<Int>()
val sequence = LinkedList<Int>()
repeat(count) {
sequence.add(readLine()!!.toInt())
}
val stringBuilder = StringBuilder()
for (index in 1..count) {
stack.push(index)
stringBuilder.append("+\n")
while (stack.isNotEmpty() &&
sequence.isNotEmpty() &&
stack.peek() == sequence.first
) {
sequence.pollFirst()
stack.pop()
stringBuilder.append("-\n")
}
}
if(stack.isEmpty()){
println(stringBuilder.toString())
} else{
println("NO")
}
}