#1 알고리즘
java.util.Stack과는 달리 java.util.Queue는 클래스가 아니라 인터페이스다. 나는 java.util.Queue 인터페이스를 구현한 클래스인 LinkedList를 Queue로서 사용했다. last()는 확장 함수(Extension functions)다.
#2 여담
확장 함수 Iterable<T>.last()가 기술된 _Collections.kt는 실제 위치가 kotlin-stdlib.jar/kotlin/collections에 있지는 않지만, 논리적인 구조상 파일 첫머리의 pakage에 kotlin.collections로 선언되어 있다. 참고로, _Collections.kt와 Collections.kt는 다른 파일이며 후자는 해당 디렉토리에 실제로 존재한다. 물론, 패키지 선언은 논리적인 구조를 나타내기 위한 것이므로 파일이 실제로 해당 패키지에 위치하지 않더라도 패키지명을 기준으로 import할 수 있다. 다만, 코틀린 표준 라이브러리(kotlin-stdlib.jar)는 기본적으로 프로젝트에 포함되어있기 때문에 일반적인 경우 어차피 import문 없이 그냥 쓸 수 있긴 하다.
#3 코드 - 코틀린
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.LinkedList
import java.util.Queue
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
// Map이 Interface이기 때문에 new Map()과 같은 코드가 불가능한 것처럼, Queue도 마찬가지다. LinkedList()는 Queue의 인터페이스를 구현하고 있기 때문에, LinkedList()를 Queue로서 쓸 수 있다.
val queue : Queue<Int> = LinkedList()
val commandCount = br.readLine().toInt()
for(i : Int in 0..<commandCount) {
val command = br.readLine()
if(command.contains("push")) {
val pushValue = command.substring(5).toInt() // 6번째 문자부터 끝 문자까지 추출
queue.offer(pushValue)
} else if(command == "pop") {
if(queue.isEmpty()) {
bw.write("-1\n")
} else {
bw.write("${queue.poll()}\n")
}
} else if(command == "size") {
if(queue.isEmpty()) {
bw.write("0\n")
} else {
bw.write("${queue.size}\n")
}
} else if(command == "empty") {
if(queue.isEmpty()) {
bw.write("1\n")
} else {
bw.write("0\n")
}
} else if(command == "front") {
if(queue.isEmpty()) {
bw.write("-1\n")
} else {
bw.write("${queue.peek()}\n")
}
} else if(command == "back") {
if(queue.isEmpty()) {
bw.write("-1\n")
} else {
// 코틀린의 확장 함수 last()는 Iterable 인터페이스를 확장한다.
bw.write("${queue.last()}\n")
}
} else {
continue
}
}
br.close()
bw.flush()
bw.close()
}
'문제 풀이 > 자료 구조' 카테고리의 다른 글
[백준] 1874 (스택 수열) (0) | 2024.01.06 |
---|---|
[백준] 1966 (프린터 큐) (0) | 2024.01.05 |
[백준] 9012 (괄호) (0) | 2023.12.30 |
[백준] 10828 (스택) (0) | 2023.11.25 |