본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 10828 스택 (코틀린)

by ESHC 2021. 5. 24.

[문제]

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

[코드]

import java.io.*
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val n = StringTokenizer(br.readLine()).nextToken().toInt()
    val stack = Stack<String>()
    for(i in 0 until n) {
        val st = StringTokenizer(br.readLine())
        val cmd = st.nextToken()
        when (cmd) {
            "pop" -> {
                bw.write("${if(stack.empty()) -1 else stack.pop()}\n")
            }
            "push" -> {
                stack.push(st.nextToken())
            }
            "top" -> {
                bw.write("${if(stack.empty()) -1 else stack.peek()}\n")
            }
            "size" -> {
                bw.write("${stack.size}\n")
            }
            "empty" -> {
                bw.write("${if(stack.empty()) 1 else 0}\n")
            }
        }
    }
    bw.flush()
    bw.close()
}

[풀이]

스택을 활용한 기본문제.

Stack<>()을 이용하여 스택 자료구조를 이용할 수 있고 입력된 명령에 따라 기본적인 stack 연산을 해주면 된다.

이 때 pop()은 익히 알고 있는 스택의 기본 연산이고 peek()은 가장 마지막에 들어온 값을 꺼내지는 않고 가져만온다.

 

Github : https://github.com/eshc123/2021AlgorithmStudy/blob/main/src/main/PS/baekjoon/10828.kt

댓글