https://www.acmicpc.net/problem/10828
난이도 : 실버 4
알고리즘 분류 : 자료구조, 스택
스택(Stack) 자료구조를 이용하여 풀 수 있는 문제 입니다.
소스코드
import java.io.BufferedReader
import java.io.InputStreamReader
lateinit var stack: IntArray
var ptr = -1
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val testCase = br.readLine()!!.toInt()
stack = IntArray(testCase)
for (i in 0 until testCase) {
when (val input = br.readLine()) {
"top" -> println(top())
"pop" -> println(pop())
"empty" -> println(isEmpty())
"size" -> println(size())
else -> push(input.split(" ")[1].toInt())
}
}
}
fun pop(): Int {
return if (ptr == -1) -1 else stack[ptr--]
}
fun push(n: Int) {
stack[++ptr] = n
}
fun isEmpty(): Int {
return if (ptr == -1) 1 else 0
}
fun size(): Int {
return ptr + 1
}
fun top(): Int {
return if (ptr == -1) -1 else stack[ptr]
}
소스코드 설명
처음에는 ArrayList를 사용하여 접근하려 했으나 역시나 시간초과가 뜬 관계로
배열과 스택의 top을 가리킬 ptn 변수를 통해 구현하였고,
입출력 속도 관계로 readLine()이 아닌 자바의 bufferedReader를 사용하였습니다.
stack 배열의 크기는 어차피 인풋으로 주어지는 라인 수 보다는 적을 것이기에, 인풋으로 주어지는 라인수에 맞춰 배열의 크기를 할당하였습니다.
스택의 구현에 관해서는 pop, push, size, top, isEmpty를 주로 보면 됩니다.
fun pop(): Int {
return if (ptr == -1) -1 else stack[ptr--]
}
pop은 스택에서 값을 꺼내는 함수로써, ptr이 -1일 경우( 값이 하나도 없을 경우) -1을 반환,
그렇지 않을 경우 꺼낸 값을 반환합니다
여기서, ptr이 0이 아닌 -1인 이유는,
ptr이 0일 경우 인덱스가 0인 것을 의미하며, 배열의 경우 인덱스가 0부터 시작하기에
해당 스택 비어있지 않다고 할 수 있습니다.
fun push(n: Int) {
stack[++ptr] = n
}
push는 스택에 값을 입력하는 함수로써, ptr의 값을 1만큼 증가시키고 해당 위치에 입력받은 값을 저장합니다.
fun isEmpty(): Int {
return if (ptr == -1) 1 else 0
}
isEmpty의 경우 스택이 비어있으면 (ptr == -1) 1을, 그렇지 않다면 0을 반환합니다.
fun size(): Int {
return ptr + 1
}
size 함수는 스택의 크기를 반환합니다.
스택의 인덱스가 0부터 시작하기에 +1만큼 하였습니다.
fun top(): Int {
return if (ptr == -1) -1 else stack[ptr]
}
top은 스택의 최상단에 위치한 값을 반환합니다. 스택이 비어있을 경우, -1을 반환합니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 2069] [Kotlin] [유클리드 호제법] 최대공약수와 최소공배수 (0) | 2022.06.14 |
---|---|
[백준 18111] [Kotlin] 마인크래프트 (0) | 2022.06.13 |
[백준 14891번] [Kotlin] 톱니바퀴 (0) | 2022.06.12 |
[백준 2470] [Kotlin] 두 용액 (0) | 2022.02.16 |
[프로그래머스][Kotlin] 신고 결과 받기 (0) | 2022.02.15 |