728x90
https://www.acmicpc.net/problem/10845
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
해설
코틀린 표준 라이브러리에는 Queue가 구현되어 있는 라이브러리가 존재하지 않아 자바에 구현되어 있는
Queue 라이브러리를 사용했다.
자바에서는 Queue가 클래스 형태가 아닌 인터페이스이기 때문에 이를 사용하기 위해 큐 인터페이스를 구현하고 있는
클래스들의 인스턴스를 선언해서 사용해야 한다.
LinkedList 클래스를 선언하여 큐를 사용해보았다.
우선 큐는 선입선출(Fisrt Input Fist Output, FIFO)이기 때문에 맨 앞에 있는 정수가 제일 나중에 들어온 것이다.
peek()과 poll()로는 제일 뒤에 있는 정수만 알 수 있고 앞에 있는 정수는 알 수 없으므로 이를 저장해 줄 front라는 변수를 선언해 놓는다.
push 명령이 나오면 정수를 큐에 넣으므로 add 메소드를 사용하면 된다. 이때 front에 정수를 저장해준다.
pop 명령이 나오면 큐가 비어있을 때 -1, 아니라면 poll() 메소드를 사용하여 맨 앞의 정수를 빼내 출력시킨다.
size는 size()를 사용
empty는 isempty()
front는 peek()
back 명령일 때는 미리 선언해놓은 front를 출력해준다.
소스 코드
import java.lang.StringBuilder
import java.util.*
fun main() {
val n = readLine()!!.toInt()
val sb = StringBuilder()
var front = 0
val que: Queue<Int> = LinkedList()
for(i in 0 until n) {
val st = StringTokenizer(readLine())
val commend = st.nextToken()
if(commend == "push") {
val num = st.nextToken().toInt()
que.add(num)
front = num
}
else if(commend == "pop") if(que.isEmpty()) sb.append("-1\n") else sb.append("${que.poll()}\n")
else if(commend == "size") sb.append("${que.size}\n")
else if(commend == "empty") if(que.isEmpty()) sb.append("1\n") else sb.append("0\n")
else if(commend == "front") if(que.isEmpty()) sb.append("-1\n") else sb.append("${que.peek()}\n")
else if(commend == "back") if(que.isEmpty()) sb.append("-1\n") else sb.append("${front}\n")
}
println(sb.toString())
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2161번: 카드1 (0) | 2021.12.06 |
---|---|
[백준/BOJ] 2164번: 카드2 (0) | 2021.12.06 |
[백준/BOJ] 4949번: 균형잡힌 세상 (0) | 2021.11.30 |
[백준/BOJ] 9012번: 괄호 (1) | 2021.11.29 |
[백준/BOJ] 10773번: 제로 (0) | 2021.11.28 |
댓글