PS(Problem Solving)/BOJ

[백준/BOJ] 10845번: 큐

JunsuKim 2021. 12. 5.
728x90

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

 

10845번: 큐

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

www.acmicpc.net

문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • 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

댓글