백준

[백준][Kotlin]1874번 스택 수열

끝까지 처음처럼 2023. 2. 26. 01:04
728x90

해당 문제는 스택의 자료구조를 알고 있으면 매우 간단한 문제입니다.

문제를 간단히 설명하자면 스택 내부에 들어간 자료들은 오름차순을 유지해야 하며, 불가능 할 시 No을 출력

push 를 실행할때는 +, pop일때는 - 를 출력하는 문제입니다.

 

하기는 작성한 코드와 채점 현황 입니다.

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*

fun main() {
//    val s = System.currentTimeMillis()
    var br = BufferedReader(InputStreamReader(System.`in`))
    //var bw = BufferedWriter(OutputStreamWriter(System.out))
    var st = StringTokenizer(br.readLine())
    val N = st.nextToken().toInt() // 수열의 개수
    var sb = StringBuilder()

    var stack = Stack<Int>()
    var value = 1
    for(i in 1 .. N){
        st = StringTokenizer(br.readLine())
        var target = st.nextToken().toInt()
        while(stack.isEmpty() || stack.last() < target){
            stack.add(value)
            value++
            sb.append("+\n")
        }

        if(stack.last() == target){
            stack.pop()
            sb.append("-\n")
        }

        if(!stack.isEmpty() && stack.last() > target){
            print("NO")
            return
        }
    }
    print(sb)

//   val e = System.currentTimeMillis()
//   println((e-s)/1000.0)

}